free() फ़ंक्शन
C/C++ लाइब्रेरी फ़ंक्शन void free(void *ptr) calloc, malloc, या realloc को कॉल करके पहले आवंटित मेमोरी को डिएलोकेट करता है।
डिक्लेरेशन
void free(void *ptr)
पैरामीटर
ptr-malloc,calloc, याreallocके साथ पहले आवंटित मेमोरी ब्लॉक का पॉइंटर, जिसे डिएलोकेट किया जाना है- यदि नल पॉइंटर पास किया जाता है, तो कोई कार्रवाई नहीं होती
उदाहरण
#include <iostream>
#include <cstdlib> // malloc, realloc, free के लिए
#include <cstring> // strcpy, strcat के लिए
using namespace std;
int main() {
char *str;
/* प्रारंभिक मेमोरी आवंटन */
str = (char *) malloc(15);
strcpy(str, "tutorialspoint");
cout << "String = " << str << ", Address = " << &str << endl;
/* मेमोरी रीअलोकेट करना */
str = (char *) realloc(str, 25);
strcat(str, ".com");
cout << "String = " << str << ", Address = " << &str << endl;
/* आवंटित मेमोरी डिएलोकेट करें */
free(str);
return 0;
}
आउटपुट
String = tutorialspoint, Address = 0x22fe38 String = tutorialspoint.com, Address = 0x22fe38
महत्वपूर्ण नियम
- केवल malloc/calloc/realloc से आवंटित मेमोरी पर free() का उपयोग करें
- new के साथ आवंटित मेमोरी पर delete का उपयोग करें
- new[] के साथ आवंटित मेमोरी पर delete[] का उपयोग करें
- free() के बाद पॉइंटर डैंगलिंग हो जाता है - इसे nullptr पर सेट करें
- डबल free() अपरिभाषित व्यवहार का कारण बनता है
सही उपयोग पैटर्न
// C-स्टाइल
int* arr = (int*)malloc(n * sizeof(int));
if (arr) {
// उपयोग करें
free(arr);
arr = nullptr;
}
// C++-स्टाइल (पसंदीदा)
int* arr = new int[n];
// उपयोग करें
delete[] arr;
arr = nullptr;
// बेस्ट: स्मार्ट पॉइंटर्स/कंटेनर्स
vector vec(n); // स्वचालित प्रबंधन
unique_ptr up(new int[n]);
आम गलतियां
| गलती | परिणाम |
|---|---|
| stack वेरिएबल पर free() | अपरिभाषित व्यवहार, क्रैश |
| new मेमोरी पर free() | अपरिभाषित व्यवहार |
| malloc मेमोरी पर delete | अपरिभाषित व्यवहार |
| डबल free | हीप करप्शन, क्रैश |
| free के बाद उपयोग | डैंगलिंग पॉइंटर, अपरिभाषित व्यवहार |