指针释放后是否需要为null

  • 本文关键字:null 是否 释放 指针 c
  • 更新时间 :
  • 英文 :

int main(){
(int*) pointer = (int*) malloc(sizeof(int));
free(pointer);
}

我从普拉塔那里学到了,斯蒂芬。C Primer Plus(开发人员库("当函数终止时,作为自动变量的指针就会消失。">所以简单地说,我不需要将指针置空

然而,我也从学校学到,如果指针在释放后没有被清空,它就会变成一个悬空指针。

两种观点相互矛盾。哪一个是正确的?

根据文档:

指针所指向的对象(或刚刚过去的对象(达到其生命周期结束时,指针的值变得不确定。

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

但是,如果指针在调用free后仍在作用域中,那么最好将其设置为nullptrNULL,以便进行以下检查:

C++:

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

C:

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

C和C++:

if (!ptr) {...}

free的作用是在执行free之前释放指针所占用的空间。指针在执行前后保存一个整数值(地址(,因此指针保存的地址现在是程序未分配的无效地址。如前所述,如果你计划在未来的情况下再次使用指针,你不想在其中有一个无效的未定义值,而你无法检查,那么使用null可以使检查更容易。

最新更新