int main(){
(int*) pointer = (int*) malloc(sizeof(int));
free(pointer);
}
我从普拉塔那里学到了,斯蒂芬。C Primer Plus(开发人员库("当函数终止时,作为自动变量的指针就会消失。">所以简单地说,我不需要将指针置空
然而,我也从学校学到,如果指针在释放后没有被清空,它就会变成一个悬空指针。
两种观点相互矛盾。哪一个是正确的?
根据文档:
指针所指向的对象(或刚刚过去的对象(达到其生命周期结束时,指针的值变得不确定。
因此,如果指针在free
之后立即超出范围,则不需要将指针设置为nullptr
(在C++11中(或NULL
(在C中且在C++11之前(,因为这样就没有机会取消引用悬挂指针。
但是,如果指针在调用free
后仍在作用域中,那么最好将其设置为nullptr
或NULL
,以便进行以下检查:
C++:
if (nullptr != ptr) {...}
C:
if (NULL != ptr) {...}
C和C++:
if (!ptr) {...}
free的作用是在执行free之前释放指针所占用的空间。指针在执行前后保存一个整数值(地址(,因此指针保存的地址现在是程序未分配的无效地址。如前所述,如果你计划在未来的情况下再次使用指针,你不想在其中有一个无效的未定义值,而你无法检查,那么使用null可以使检查更容易。