C语言如何释放指针

Python015

C语言如何释放指针,第1张

C语言中可以使用free函数释放指针

1、free函数:

原型:void

free(void

*ptr);

功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存

2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:

int

*a

=

NULL

int

*b

=

(int*)

malloc(sizeof(int)

*

10)

a=

b

/*

执行大量操作后

*/

if(a

!=

NULL)

{free(a)a=NULL}

if(b

!=

NULL)

{free(b)b=NULL}

这段话中有好几个错误。

1. 如果有int A, int *B = &A, 这时执行free(B) 一定引起内存错误。

free只能使用在动态分配的内存上,不能用在堆栈或静态数据上。

类似 int A,或 static int A,这样的变量定义,是在编译时已经确定了内存位置。

动态分配是在运行时,从堆中临时分配的内存块(用malloc,或new)。这些内存块需要用 free(malloc)或delete(new)释放;

2. 变量名实际是内存地址的代称,这句也不完全对

在程序中,变量名代表了“这个地址上的数值”,只有对变量使用&操作,才能得到变量的地址

3. free(B)应该释放了B这个指针变量

如果指针变量存放了一个动态得到的地址,free(B)释放的是变量B的数值(不是变量B的地址),由于变量B的数值是一个动态分配得到的地址,所以free释放的是动态地址。