相关疑难解决方法(0)

删除指针后将指针NULL化是一种好习惯吗?

我首先要说的是,使用智能指针,你永远不必担心这一点.

以下代码有什么问题?

Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)

这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:

在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.

有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.

c++ null pointers dynamic-allocation

139
推荐指数
6
解决办法
8万
查看次数

在释放它们之后真的应该将指针设置为"NULL"吗?

似乎有两个论点为什么人们应该NULL在释放它们之后设置指针.

双重释放指针时避免崩溃.

简短:free()不小心召唤第二次,当它被设置为时,不会崩溃NULL.

  • 几乎总是这掩盖了一个逻辑错误,因为没有理由free()第二次调用.让应用程序崩溃并能够修复它会更安全.

  • 它不能保证崩溃,因为有时在同一地址分配新内存.

  • 当有两个指向同一地址的指针时,主要发生双重自由.

逻辑错误也可能导致数据损坏.

避免重用已释放的指针

短:malloc()除非释放指针设置为,否则访问释放的指针可能会导致数据损坏,如果在同一位置分配内存NULL

  • NULL如果偏移足够大(someStruct->lastMember,theArray[someBigNumber]),则无法保证在访问指针时程序崩溃.而不是崩溃将导致数据损坏.

  • 将指针设置为NULL无法解决具有相同指针值的不同指针的问题.

问题

这是一篇反对NULL在释放后盲目设置指针的帖子.

  • 哪一个更难调试?
  • 是否有可能抓住两者?
  • 这种错误导致数据损坏而不是崩溃的可能性有多大?

随意扩展这个问题.

c free pointers

48
推荐指数
3
解决办法
3万
查看次数

标签 统计

pointers ×2

c ×1

c++ ×1

dynamic-allocation ×1

free ×1

null ×1