C++ 中的free() 函数释放先前使用 calloc、malloc 或 realloc 函数分配的内存块,使其可用于进一步分配。
C++ 中的free() 函数释放先前使用 calloc、malloc 或 realloc 函数分配的内存块,使其可用于进一步分配。
free() 函数不会改变指针的值,即它仍然指向同一个内存位置。
free()原型
void free(void *ptr);
该函数在<cstdlib> 头文件中定义。
参数:
ptr
: 指向先前使用 malloc、calloc 或 realloc 分配的内存块的指针。指针可能为空,也可能不指向由 calloc、malloc 或 realloc 函数分配的内存块。- 如果 ptr 为空,free() 函数什么也不做。
- 如果 ptr 不指向由 calloc、malloc 或 realloc 函数分配的内存块,则会导致未定义的行为。
返回:
free() 函数不返回任何内容。它只是使内存块可供我们使用。
示例 1:free() 函数如何与 malloc() 一起使用?
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int *ptr;
ptr = (int*) malloc(5*sizeof(int));
cout << "Enter 5 integers" << endl;
for (int i=0; i<5; i++)
{
// *(ptr+i) can be replaced by ptr[i]
cin >> *(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;
}
运行程序时,输出将是:
Enter 5 integers 21 3 -10 -13 45 User entered value 21 3 -10 -13 45 Garbage Value 6690624 0 6685008 0 45
示例 2:free() 函数如何与 calloc() 一起使用?
#include <iostream>
#include <cstdlib>
#include <cstring>
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;
}
运行程序时,输出将是:
Before freeing Address = 0x6a1530 Value = 5.233 After freeing Address = 0x6a1530 Value = 9.7429e-039
示例 3:free() 函数如何与 realloc() 一起使用?
#include <iostream>
#include <cstdlib>
#include <cstring>
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: " <<ptr << endl;
free(ptr);
/* prints a garbage value after ptr is free */
cout << endl << "Garbage Value: " << ptr;
return 0;
}
运行程序时,输出将是:
Before reallocating: Hello C++ After reallocating: Hello, Welcome to C++ Garbage Value: @↨/
示例 4:free() 函数与其他情况
#include <iostream>
#include <cstdlib>
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;
}
运行程序时,输出将是:
Pointer is Null 5
相关用法
- C++ freopen()用法及代码示例
- C++ frexp()用法及代码示例
- C++ fread()用法及代码示例
- C++ fcvt()用法及代码示例
- C++ fwscanf()用法及代码示例
- C++ fmax()用法及代码示例
- C++ fdim()用法及代码示例
- C++ fmin()用法及代码示例
- C++ fetestexcept()用法及代码示例
- C++ forward_list::unique()用法及代码示例
- C++ forward_list::emplace_front()用法及代码示例
- C++ fopen()用法及代码示例
- C++ forward_list::max_size()用法及代码示例
- C++ forward_list::reverse()用法及代码示例
- C++ feupdateenv()用法及代码示例
- C++ forward_list::swap()用法及代码示例
- C++ forward_list::front()、forward_list::empty()用法及代码示例
- C++ functional::bad_function_call用法及代码示例
- C++ find_if()用法及代码示例
- C++ find()用法及代码示例
注:本文由纯净天空筛选整理自 C++ free()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。