我在以下代码中执行"delete"命令时收到消息"MyTest1.exe触发了断点":
void Test::delPt(int i)
{
delete pt[i];
pt[i] = NULL;
}
void Test::clrPts()
{
int i;
for (i = 0; i < n_pts; i++)
delPt(i);
n_pts = 0;
}
数组声明如下:
BasePt *pt[NUM_PTS];
。并且每个数组元素都是使用"new"命令创建的。 BasePt 析构函数中没有代码。 我不确定这里发生了什么,如有必要,我可以提供更多细节。 我正在使用Visual Studio 2012。
此问题是由某种堆损坏引起的。 通过使用视觉检漏仪,我能够消除任何泄漏问题,但问题仍然存在。 我试图减少程序,直到问题没有发生,然后重新添加代码,但这并没有导致我找到问题的根源。 我的问题是,一般来说,我如何找到堆损坏的根源? 程序中必须存在堆已损坏的第一个点。
(更新)最终我发现了错误,这是我代码另一部分的一些堆损坏。 公平地说,我不可能发布我的所有代码,因为我的项目非常大。 当我发布原始消息时,我不知道这是一个堆损坏问题。 不知道为什么我得到了所有的反对票。