对 NULL 指针连续 free多次会出错吗?为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对 NULL 指针连续 free多次会出错吗?为啥?相关的知识,希望对你有一定的参考价值。

理论上对空指针free多次无错,free就是让此指针所指向的动态分配区标志为可用,即让系统从新标识(由系统完成),可参见free源码。
一般free后,立即将指针置为空,防止野指针出现,而在使用该指针时加上NULL判断则可避免出错。
参考技术A 1.没分配内存的,可以连续多次free
2.分配内存的不能连续多次free;第一次free后置为NULL了,满足情况1,就可以进行连续free了
我去再了解一下,为什么
参考技术B free只能用一次。 参考技术C 对同一块内存只能一次

malloc/free函数

一、malloc

  函数原型:void *malloc(unsigned int size);

  功       能:在内存的动态存储区中分配一个长度为size的连续空间。

  返  回 值:指向所分配的连续存储域的起始地址的指针,若失败,返回NULL

二、free 

  函数原型:void free(void *p);

  功       能:释放指针p所指向的内存区

  返  回 值:无

注意:判断内存是否分配成功是重点。
malloc函数返回类型时void *, 只会是一个合法的指针或者NULL指针.
 1 int *p = NULL;
 2  
 3 if ((p = (int *)malloc(size)) != NULL)
 4 {
 5     //正常情况,申请成功
 6 }
 7 else
 8 {
 9     //这里处理未申请成功的情况
10 }
11 free(p);

 

以上是关于对 NULL 指针连续 free多次会出错吗?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

字符指针用free释放后,需要设置null吗?

求助 一个指针被free之后啥时候是NULL?还是不可能是NULL?

C语言中free掉一段空间后为啥还要使用NULL

为啥free函数不在释放内存后,将指针置NULL,野指针有啥用

指针free后还存在吗?

C语言指针变量为啥要赋初值?