在Linux上向C ++(Qtopia-Core-4.3.3)中的指针赋值为NULL

时间:2009-06-29 07:20:58

标签: c++

当我尝试为我的指针指定空值时,它有时会在该行崩溃。代码是 像这样的东西:

if(s_counter != NULL)
{
    delete s_counter;
    s_counter = NULL; // it sometimes crashes here.
}

这是不可再现的,100%,但它经常发生。任何人都可以帮忙吗?

5 个答案:

答案 0 :(得分:6)

可能该行已关闭,并且在删除时崩溃。

答案 1 :(得分:3)

请注意,虽然可以删除NULL指针,但删除非NULL指针不一定正常。指针必须已使用new分配,并且必须尚未删除。另请注意,为删除的指针分配NULL会增加错误的安全感 - 仅仅检查NULL是不够的,您的程序内存分配语义也需要正确。

答案 2 :(得分:2)

我怀疑你是双重删除。这有各种奇怪的效果。在删除时设置一个断点并在删除之前查看该对象。它看起来有效吗?另一种方法是在删除时设置断点,并确保只到达一次。

答案 3 :(得分:2)

这就是我想到的:

  • 确保在分配之前将s_counter初始化为NULL(或在C ++中更好0),这将确保您永远不会尝试删除垃圾(并崩溃)。
  • 如果s_counter是对象的一部分,则该对象可能已被删除。
  • 如果s_counter是静态的,因为它的名字似乎暗示,你无法可靠地重现它的事实可能是由竞争条件引起的,请检查你的线程访问模式。

答案 4 :(得分:0)

可能发生的另一件事是你的s_counter指针指向一个对象数组而不是一个对象。在这种情况下,您应该使用delete[]而不是delete。如果在对象数组上使用delete,则内存将被破坏,并且可能会发生各种奇怪的事情。