c - 指针释放后是否需要清空?
问题描述
int main(){
(int*) pointer = (int*) malloc(sizeof(int));
free(pointer);
}
我从“普拉塔,斯蒂芬”那里学到了东西。C Primer Plus (Developer's Library)', “当函数终止时,作为自动变量的指针消失。” 很简单,我不需要将指针设为空
但是,我还从学校了解到,如果指针在释放后没有被清空,它就会变成一个悬空指针。
两种想法相互矛盾。哪一个是正确的?
解决方案
根据文档:
当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定。
因此,如果指针在您之后立即超出范围,则不需要将指针设置为nullptr
(在 C++11 中)或(在 C 和 C++11 之前) ,因为这样您就没有机会取消引用悬空指针.NULL
free
但是,如果在调用 之后指针仍然在范围内free
,那么好的做法是将其设置为nullptr
orNULL
以便以下检查起作用:
C++:
if (nullptr != ptr) {...}
C:
if (NULL != ptr) {...}
C 和 C++:
if (!ptr) {...}
推荐阅读
- javascript - 我怎样才能做一个切换功能
- java - 如何修复原因:java.lang.IllegalArgumentException:找不到类 com.moniesta.manufactoring.domain.Price 的 id 属性
- python - python写入excel覆盖单元格
- coq - 在 Catalina 上通过 nix 安装 mathcomp 8.12/8.13 时出现问题
- c++ - 给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)
- latex - 章节中每一页的页码保持在中心
- vim - 有没有办法在 ctags 中使用相同的标签名称?
- c - 错误:未声明边缘(函数中首次使用)
- java - 如何从android的内部类内部打破for循环?
- performance - 写入文件时 HTTP API 停止响应