【发布时间】:2011-11-18 22:30:15
【问题描述】:
尝试删除此内容时出现分段错误。
我知道你想删除这个,但它是我的前任留下的。我知道some precautions I should take,它已经过验证和处理。
我不知道什么样的条件可能会导致这次崩溃,只是偶尔会发生一次。大约 95% 的情况下,代码运行良好,但有时这似乎以某种方式损坏并崩溃。
类的析构函数不做任何事情。
我是否应该假设某些东西在其他地方破坏了我的堆,并且 this 指针以某种方式搞砸了?
编辑:根据要求,崩溃代码:
long CImageBuffer::Release()
{
long nRefCount = InterlockedDecrement(&m_nRefCount);
if(nRefCount == 0)
{
delete this;
}
return nRefCount;
}
对象是用一个新对象创建的,它不在任何类型的数组中。
【问题讨论】:
-
“当我这样做时会很痛” 然后不要这样做......或者显示更多有用的信息以获得更有用的答案。 (代码、堆栈等)
-
InterlockedDecrement部分困扰着我:您的对象是否存在于多个线程中? m_nRefCount 是否正确对齐LONG? -
使用
InterlockedDecrement只会使递减原子。您需要减量和 if 语句中的测试是原子的。 -
@JoeGauterin:嗯?为什么测试需要是原子的?重要的是它只被删除一次,对吧?计数达到零后多久删除对象都没有关系?
标签: c++ segmentation-fault destructor delete-operator self-destruction