一个指针释放后不置空的危害

来源:互联网 发布:装配式结构优化 编辑:程序博客网 时间:2024/04/29 08:22

今天面试碰到这个问题了,可以说这个问题是我回答最冤枉的。

我觉得我对这个问题,有很清晰的认识。但是不知道为什么,嘴秃喽了一句内存泄漏,真想打自己一个大嘴巴。

内存泄漏的情况的产生是:例如:用int* p=(int*)malloc(sizeof(int));让p重新指向其它,这样用malloc()开辟的空间就找不到了,造成内存泄漏。

一个指针释放后不置空的后果:

free(p);后p是一个非法的指针。不可以访问它。如果代码很长,误以为p合法,直接访问,有可能会造成程序崩溃。

不置空的话,在后面无法检测指针的合法性。我们在平时编程时,对空指针很容易检测(if(NULL==p)),但是对于非法指针p不为空,我们是无法检测到的。

防止对一个已经释放的指针多次释放造成程序崩溃,但是对一个null指针多次释放是合法的。

所以,我们在free后一定要将指针置空。

防止我们忘记,可以在程序开始用宏定义一个函数:

#define SAFE_FREE(p) \
    if (p)           \
    {                \
        free(p);     \
        p = NULL;    \
    }
这样我们就可以使用SAFE_FREE防止我们忘记置空。

不置空的危害性是非常大的,所以一定要置空。


0 0
原创粉丝点击