C++ free()函数

时间:2020-02-23 14:29:57  来源:igfitidea点击:

在本文中,我们将重点关注C++ free()函数。

什么是C++ free()函数?

C++包含各种函数和运算符来处理内存管理,例如new运算符,malloc等。

C++ free()函数使程序员可以释放以前由某些实体占用的内存空间。
也就是说,free()函数取消分配分配给实体的存储块以进行存储。

因此,使用free()函数,我们可以使存储空间易于进一步处理。
此外,它使我们能够在动态运行时清空内存存储块。

现在,让我们在接下来的部分中关注free()函数的结构。

free()函数的语法

看看下面的语法!

void free(void *ptr)

free()函数接受一个指针变量作为参数。
该指针变量是指向分配给指向实体的内存存储的指针。

因此,free()函数不会更改/更改指针变量的值,即,指针将指向已取消分配的同一内存位置,并且释放了内存!

  • 指针变量仅应指向已使用malloc,realloc或者calloc函数分配的内存块,否则将导致未定义的行为。

  • 如果指针变量为NULL,则free()对其不执行任何操作。

示例– C++ free()函数

在下面的示例中,我们使用了C++ calloc()函数将内存存储动态分配给给定的指针变量。

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int main()
{
	int *p;
	p = (int*) calloc(1,10);
	*p = 25;

	cout << "Value stored at pointer variable p before applying free() function: "<< *p<<endl;
	free(p);
	cout << "Value stored at pointer variable p after applying free() function: " << *p << endl;
	return 0;
}

输出:

Value stored at pointer variable p before applying free() function: 25
Value stored at pointer variable p after applying free() function: 0

其中我们使用了malloc()函数在运行时分配内存空间。
此外,free()函数不会更改指向内存块的指针的地址值,如下所示:

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int main()
{
	int *p;
	p =(int*) malloc(sizeof(int));
	*p = 25;
  cout<<"Address before applying free() function: "<<p<<endl;
	cout << "Value stored at pointer variable p before applying free() function: "<< *p<<endl;
	free(p);
	cout << "Value stored at pointer variable p after applying free() function: " << *p << endl;
	cout<<"Address after applying free() function: "<<p<<endl;
	return 0;
}

输出:

Address before applying free() function: 0xf89c20
Value stored at pointer variable p before applying free() function: 25
Value stored at pointer variable p after applying free() function: 0
Address after applying free() function: 0xf89c20