Функцията free () в C ++ освобождава блок памет, разпределен преди това с помощта на функции calloc, malloc или realloc, като го прави достъпна за по-нататъшно разпределение.
Функцията free () в C ++ освобождава блок памет, разпределен преди това с помощта на функции calloc, malloc или realloc, като го прави достъпна за по-нататъшно разпределение.
Функцията free () не променя стойността на показалеца, т.е. все още сочи към същото място в паметта.
безплатен () прототип
безплатно (void * ptr);
Функцията е дефинирана в заглавния файл.
безплатни () параметри
- ptr: указател към блок памет, предварително разпределен с malloc, calloc или realloc. Указателят може да е нулев или да не сочи към блок памет, разпределен от функции calloc, malloc или realloc.
- Ако ptr е нула, функцията free () не прави нищо.
- Ако ptr не сочи към блок памет, разпределен от функции calloc, malloc или realloc, това причинява недефинирано поведение.
безплатно () Върната стойност
Функцията free () не връща нищо. Това просто прави блока памет достъпен за нас.
Пример 1: Как функцията free () работи с 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; )
Когато стартирате програмата, изходът ще бъде:
Въведете 5 цели числа 21 3 -10 -13 45 Въведена от потребителя стойност 21 3 -10 -13 45 Стойност на боклука 6690624 0 6685008 0 45
Пример 2: Как функцията free () работи с 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; )
Когато стартирате програмата, изходът ще бъде:
Преди освобождаване на адрес = 0x6a1530 Стойност = 5.233 След освобождаване на адрес = 0x6a1530 Стойност = 9.7429e-039
Пример 3: Как функцията free () работи с 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