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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥free函数不在释放内存后,将指针置NULL,野指针有啥用相关的知识,希望对你有一定的参考价值。

因为系统不知道有多少指针指向这块动态申请的内存,假如只有一个指针指向这块内存,那么把该指针置NULL可以避免野指针,但是如果有多个指针呢,如
int * ptr1=(int *)malloc(20*sizeof(int ));
int * ptr2=ptr1; //有两个指针指向这块动态申请的内存
... //做一些操作
free(ptr1);
即使在free函数中将ptr1置NULL,ptr2仍然是野指针
所以free函数索性不管,让用户自行处理
参考技术A 野指针没用,应该设置为NULL,但如果之后在给指针赋新的值之前不会再访问到,那么也无所谓 参考技术B 因为free函数得到的是实参 无法修改调用者传给他的变量的值

C/C++——指针

未初始化的指针可以指向任何地方,空指针表示未分配、不指向任何有意义的地方,
定义指针变量,一定要记得指针初始化,分配内存,最后要释放指针,以防内存泄漏
int *p;
p=(int *)malloc(sizeof(int));//分配不成功将返回空指针
free(p);
p=NULL;//指针释放后,是释放指向的那块内存,但是该指针还是没有变,所以free后,该指针指向了垃圾内存,需要把指针置为空指针,不指向任何值。
#define NULL 0 空指针表示不指向任何地方,(可以理解成指向地址为NULL,但是这个地址是不会允许有任何操作的,所以空指针是不指向任何实际的对象或函数空指针不指向任何实际的对象或函数,反过来说对象或函数的指针也不可能为空指针。)
赋值为空指针,是让它在没有被使用之前,不让它乱指,但是在具体使用的时候还是得先给他个具体的地址,指向一个具体的内存空间
viod *P 无类型指针 表示不指定类型的指针,可以指向任何类型
野指针:指向垃圾(不可用)内存的指针,所以未初始化指针、free后未置NULL指针、指针操作超出变量作用范围都将产生野指针

 指针的释放是释放指针指向堆中的内存区域

reference:

    https://www.cnblogs.com/linyilong/p/5165731.html

    https://www.cnblogs.com/stoneJin/archive/2011/09/21/2183684.html

    https://blog.csdn.net/toonny1985/article/details/4489777

以上是关于为啥free函数不在释放内存后,将指针置NULL,野指针有啥用的主要内容,如果未能解决你的问题,请参考以下文章

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

[C]安全释放堆内存

在用free()函数释放指针内存时为何要将其指针置空

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

为啥我们要在 free() 释放内存后清空指针? [复制]

指针free后还存在吗?