Funkce free () v C ++ uvolňuje blok paměti dříve přidělené pomocí funkcí calloc, malloc nebo realloc, čímž je k dispozici pro další přidělení.
Funkce free () v C ++ uvolňuje blok paměti dříve přidělené pomocí funkcí calloc, malloc nebo realloc, čímž je k dispozici pro další přidělení.
Funkce free () nezmění hodnotu ukazatele, to znamená, že stále ukazuje na stejné místo v paměti.
bezplatný () prototyp
void free (void * ptr);
Funkce je definována v hlavičkovém souboru.
free () parametry
- ptr: Ukazatel na blok paměti dříve přidělený malloc, calloc nebo realloc. Ukazatel může mít hodnotu null nebo nemusí ukazovat na blok paměti přidělený funkcemi calloc, malloc nebo realloc.
- Pokud je ptr null, funkce free () nedělá nic.
- Pokud ptr neukazuje na blok paměti přidělený funkcemi calloc, malloc nebo realloc, způsobí to nedefinované chování.
free () Návratová hodnota
Funkce free () nevrací nic. Jednoduše nám zpřístupní blok paměti.
Příklad 1: Jak funguje funkce free () s 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; )
Když spustíte program, výstup bude:
Zadejte 5 celých čísel 21 3 -10 -13 45 Uživatelem zadaná hodnota 21 3 -10 -13 45 Odpadní hodnota 6690624 0 6685008 0 45
Příklad 2: Jak funguje funkce free () s 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; )
Když spustíte program, výstup bude:
Před uvolněním adresy = 0x6a1530 Hodnota = 5,233 Po uvolnění adresy = 0x6a1530 Hodnota = 9,7429e-039
Příklad 3: Jak funguje funkce free () s 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