MyTest1.exe 在 C++ / MFC 程序中触发了删除命令的断点



我在以下代码中执行"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。

此问题是由某种堆损坏引起的。 通过使用视觉检漏仪,我能够消除任何泄漏问题,但问题仍然存在。 我试图减少程序,直到问题没有发生,然后重新添加代码,但这并没有导致我找到问题的根源。 我的问题是,一般来说,我如何找到堆损坏的根源? 程序中必须存在堆已损坏的第一个点。

(更新)最终我发现了错误,这是我代码另一部分的一些堆损坏。 公平地说,我不可能发布我的所有代码,因为我的项目非常大。 当我发布原始消息时,我不知道这是一个堆损坏问题。 不知道为什么我得到了所有的反对票。

最新更新