La fonction free () en C ++ désalloue un bloc de mémoire précédemment alloué à l'aide des fonctions calloc, malloc ou realloc, le rendant disponible pour d'autres allocations.
La fonction free () en C ++ désalloue un bloc de mémoire précédemment alloué à l'aide des fonctions calloc, malloc ou realloc, le rendant disponible pour d'autres allocations.
La fonction free () ne modifie pas la valeur du pointeur, c'est-à-dire qu'elle pointe toujours vers le même emplacement mémoire.
prototype gratuit ()
vide gratuit (void * ptr);
La fonction est définie dans le fichier d'en-tête.
Paramètres free ()
- ptr: Un pointeur vers un bloc mémoire précédemment alloué avec malloc, calloc ou realloc. Le pointeur peut être nul ou ne pas pointer vers un bloc de mémoire alloué par les fonctions calloc, malloc ou realloc.
- Si ptr est nul, la fonction free () ne fait rien.
- Si ptr ne pointe pas vers un bloc mémoire alloué par les fonctions calloc, malloc ou realloc, il provoque un comportement indéfini.
free () Valeur de retour
La fonction free () ne renvoie rien. Il met simplement le bloc mémoire à notre disposition.
Exemple 1: Comment fonctionne la fonction free () avec 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; )
Lorsque vous exécutez le programme, la sortie sera:
Entrez 5 entiers 21 3-10-13 45 Valeur saisie par l'utilisateur 21 3-10-13 45 Valeur de garbage 6690624 0 6685008 0 45
Exemple 2: Comment la fonction free () fonctionne avec 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; )
Lorsque vous exécutez le programme, la sortie sera:
Avant la libération Adresse = 0x6a1530 Valeur = 5,233 Après la libération Adresse = 0x6a1530 Valeur = 9,7429e-039
Exemple 3: Comment la fonction free () fonctionne-t-elle avec 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