Den gratis () -funktion i C ++ deallokerer en hukommelsesblok, der tidligere er allokeret ved hjælp af calloc-, malloc- eller realloc-funktioner, hvilket gør den tilgængelig til yderligere allokeringer.
Den gratis () -funktion i C ++ deallokerer en hukommelsesblok, der tidligere er allokeret ved hjælp af calloc-, malloc- eller realloc-funktioner, hvilket gør den tilgængelig til yderligere allokeringer.
Funktionen gratis () ændrer ikke markørens værdi, det vil sige, at den stadig peger på den samme hukommelsesplacering.
gratis () prototype
ugyldig fri (ugyldig * ptr);
Funktionen er defineret i header-fil.
gratis () Parametre
- ptr: En markør til en hukommelsesblok, der tidligere er allokeret med malloc, calloc eller realloc. Markøren kan være nul eller pege muligvis ikke på en hukommelsesblok allokeret af calloc-, malloc- eller realloc-funktioner.
- Hvis ptr er nul, gør funktionen free () intet.
- Hvis ptr ikke peger på en hukommelsesblok tildelt af calloc-, malloc- eller realloc-funktioner, forårsager det udefineret adfærd.
gratis () Returværdi
Funktionen gratis () returnerer intet. Det gør simpelthen hukommelsesblokken tilgængelig for os.
Eksempel 1: Hvordan fungerer gratis () funktion med 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; )
Når du kører programmet, vil output være:
Indtast 5 heltal 21 3-10-13 45 Brugerindtastet værdi 21 3 -10-13 45 Affaldsværdi 6690624 0 6685008 0 45
Eksempel 2: Hvordan fungerer gratis () funktion med 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; )
Når du kører programmet, vil output være:
Før frigørelse af adresse = 0x6a1530 Værdi = 5.233 Efter frigørelse af adresse = 0x6a1530 værdi = 9.7429e-039
Eksempel 3: Hvordan fungerer gratis () funktion med 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