当我尝试为我的指针指定空值时,它有时会在该行崩溃。代码是 像这样的东西:
if(s_counter != NULL)
{
delete s_counter;
s_counter = NULL; // it sometimes crashes here.
}
这是不可再现的,100%,但它经常发生。任何人都可以帮忙吗?
答案 0 :(得分:6)
可能该行已关闭,并且在删除时崩溃。
答案 1 :(得分:3)
请注意,虽然可以删除NULL指针,但删除非NULL指针不一定正常。指针必须已使用new分配,并且必须尚未删除。另请注意,为删除的指针分配NULL会增加错误的安全感 - 仅仅检查NULL是不够的,您的程序内存分配语义也需要正确。
答案 2 :(得分:2)
我怀疑你是双重删除。这有各种奇怪的效果。在删除时设置一个断点并在删除之前查看该对象。它看起来有效吗?另一种方法是在删除时设置断点,并确保只到达一次。
答案 3 :(得分:2)
这就是我想到的:
答案 4 :(得分:0)
可能发生的另一件事是你的s_counter
指针指向一个对象数组而不是一个对象。在这种情况下,您应该使用delete[]
而不是delete
。如果在对象数组上使用delete,则内存将被破坏,并且可能会发生各种奇怪的事情。