当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ free()用法及代码示例


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++ free()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。