一个指针释放后不置空的危害
今天面试碰到这个问题了,可以说这个问题是我回答最冤枉的。
我觉得我对这个问题,有很清晰的认识。但是不知道为什么,嘴秃喽了一句内存泄漏,真想打自己一个大嘴巴。
内存泄漏的情况的产生是:例如:用int* p=(int*)malloc(sizeof(int));让p重新指向其它,这样用malloc()开辟的空间就找不到了,造成内存泄漏。
一个指针释放后不置空的后果:
free(p);后p是一个非法的指针。不可以访问它。如果代码很长,误以为p合法,直接访问,有可能会造成程序崩溃。
不置空的话,在后面无法检测指针的合法性。我们在平时编程时,对空指针很容易检测(if(NULL==p)),但是对于非法指针p不为空,我们是无法检测到的。
防止对一个已经释放的指针多次释放造成程序崩溃,但是对一个null指针多次释放是合法的。
所以,我们在free后一定要将指针置空。
防止我们忘记,可以在程序开始用宏定义一个函数:
#define SAFE_FREE(p)
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 关于delete释放指针要注意的问题
- 下一篇: 正常指针参数释放和引用指针参数释放的问题
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2