首页 > 解决方案 > 指针释放后是否需要清空?

问题描述

int main(){

(int*) pointer = (int*) malloc(sizeof(int));
free(pointer);

}

我从“普拉塔,斯蒂芬”那里学到了东西。C Primer Plus (Developer's Library)', “当函数终止时,作为自动变量的指针消失。” 很简单,我不需要将指针设为空

但是,我还从学校了解到,如果指针在释放后没有被清空,它就会变成一个悬空指针。

两种想法相互矛盾。哪一个是正确的?

标签: c

解决方案


根据文档

当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定。

因此,如果指针在您之后立即超出范围,则不需要将指针设置为nullptr(在 C++11 中)或(在 C 和 C++11 之前) ,因为这样您就没有机会取消引用悬空指针.NULLfree

但是,如果在调用 之后指针仍然在范围内free,那么好的做法是将其设置为nullptrorNULL以便以下检查起作用:

C++:

if (nullptr != ptr) {...}

C:

if (NULL != ptr) {...}

C 和 C++:

if (!ptr) {...}

推荐阅读