测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]

Posted

技术标签:

【中文标题】测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]【英文标题】:Test answer is wrong yes? It will not crash as we delete NULL pointer which is safe [duplicate] 【发布时间】:2014-10-09 19:32:54 【问题描述】:

考虑以下代码:

template<class T> void Kill(T *& objPtr)

   delete objPtr;
   objPtr = NULL;

class MyClass

;
void Test()

   MyClass *ptr = new MyClass();
   Kill(ptr);
   Kill(ptr);
 

调用 Test() 会导致以下哪一个?

答案:代码会崩溃或抛出异常

测试答案是错误的是吗?它不会崩溃,因为我们删除了安全的 NULL 指针。

【问题讨论】:

你是对的。我猜测试答案最初是假设指针是按值而不是引用传递的(或者,它只是由不知道自己在做什么的人编写的)。 NULL 的定义没有显示,它只是可能是荒谬的而不是标准的NULL。如果没有这个,只能说测试答案很很可能(但没有证明)不正确。 【参考方案1】:

你是对的,测试答案是错误的。

第一个Kill调用delete,并将指针(通过引用传递)设置为NULL 第二个Kill 在空指针which is safe 上调用delete

注意:

根据 Cheers 和 hth。 - Alf 评论说,这是假设 NULL 是通常的空指针 0

【讨论】:

【参考方案2】:

是的,删除空指针是安全的,但是我认为您不需要调用 delete 两次,因为 delete 无论如何都会执行检查。另外,我建议您使用像 unique_ptr&lt;T&gt; 这样的智能指针来处理删除。

【讨论】:

以上是关于测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当我们在 C 中取消引用 NULL 指针时,操作系统会发生啥?

删除空指针[重复]

如何删除一棵普通二叉树的叶子结点?

为什么delete指针后指针设为null

如何测试软件的内存泄露呢,是有啥工具吗

当存储非指针值时,C中实际发生了什么? [重复]