Funcția free () din C ++ distribuie un bloc de memorie alocat anterior folosind funcții calloc, malloc sau realloc, făcându-l disponibil pentru alocări ulterioare.
Funcția free () din C ++ distribuie un bloc de memorie alocat anterior folosind funcții calloc, malloc sau realloc, făcându-l disponibil pentru alocări ulterioare.
Funcția free () nu modifică valoarea indicatorului, adică indică în continuare aceeași locație de memorie.
free () prototip
void free (void * ptr);
Funcția este definită în fișierul antet.
free () Parametri
- ptr: un pointer către un bloc de memorie alocat anterior cu malloc, calloc sau realloc. Pointerul poate fi nul sau nu poate indica un bloc de memorie alocat de funcțiile calloc, malloc sau realloc.
- Dacă ptr este nul, funcția free () nu face nimic.
- Dacă ptr nu indică un bloc de memorie alocat de funcțiile calloc, malloc sau realloc, provoacă un comportament nedefinit.
free () Valoare returnată
Funcția free () nu returnează nimic. Pur și simplu ne pune la dispoziție blocul de memorie.
Exemplul 1: Cum funcționează funcția free () cu malloc ()?
#include #include using namespace std; int main() ( int *ptr; ptr = (int*) malloc(5*sizeof(int)); cout << "Enter 5 integers" << endl; for (int i=0; i> *(ptr+i); ) cout << endl << "User entered value"<< endl; for (int i=0; i<5; i++) ( cout << *(ptr+i) << " "; ) free(ptr); /* prints a garbage value after ptr is free */ cout << "Garbage Value" << endl; for (int i=0; i<5; i++) ( cout << *(ptr+i) << " "; ) return 0; )
Când rulați programul, ieșirea va fi:
Introduceți 5 numere întregi 21 3 -10 -13 45 Valoarea introdusă de utilizator 21 3 -10 -13 45 Valoare gunoi 6690624 0 6685008 0 45
Exemplul 2: Cum funcționează funcția free () cu calloc ()?
#include #include #include using namespace std; int main() ( float *ptr; ptr = (float*) calloc(1,sizeof(float)); *ptr = 5.233; cout << "Before freeing" << endl; cout << "Address = " << ptr << endl; cout << "Value = " << *ptr << endl; free(ptr); cout << "After freeing" << endl; /* ptr remains same, *ptr changes*/ cout << "Address = " << ptr << endl; cout << "Value = " << *ptr << endl; return 0; )
Când rulați programul, ieșirea va fi:
Înainte de a elibera Adresa = 0x6a1530 Valoare = 5.233 După eliberarea Adresă = 0x6a1530 Valoare = 9.7429e-039
Exemplul 3: Cum funcționează funcția free () cu realloc ()?
#include #include #include using namespace std; int main() ( char *ptr; ptr = (char*) malloc(10*sizeof(char)); strcpy(ptr,"Hello C++"); cout << "Before reallocating: " << ptr << endl; /* reallocating memory */ ptr = (char*) realloc(ptr,20); strcpy(ptr,"Hello, Welcome to C++"); cout << "After reallocating: " <
When you run the program, the output will be:
Before reallocating: Hello C++ After reallocating: Hello, Welcome to C++ Garbage Value: @↨/
Example 4: free() function with other cases
#include #include using namespace std; int main() ( int x = 5; int *ptr1 = NULL; /* allocatingmemory without using calloc, malloc or realloc*/ int *ptr2 = &x; if(ptr1) ( cout << "Pointer is not Null" << endl; ) else ( cout << "Pointer is Null" << endl; ) /* Does nothing */ free(ptr1); cout << *ptr2; /* gives a runtime error if free(ptr2) is executed*/ // free(ptr2); return 0; )
When you run the program, the output will be:
Pointer is Null 5