我有一个矢量如下。
std::vector<std::string> exportNameList;
我通过使用push_back方法向此添加元素。但我得到一个调试断言为“
“Windows已在AxCent.exe中触发了断点。这可能是由于堆损坏,这表示AxCent.exe或其加载的任何DLL中存在错误。
当它调用类的析构函数时会发生这种情况。当我引用调用堆栈时,我被引导到vector类中的以下代码块。
~vector()
{ // destroy the object
_Tidy();
}
我注意到删除矢量时出错。我对么?我该如何解决?我已经提到了很多例子,但是还没有设法解决这个问题。我是C ++的新手。
非常感谢。
答案 0 :(得分:5)
你可能会破坏其他地方使用的内存。
答案 1 :(得分:1)
您遇到的错误可能与您的矢量没有直接关系。 如果在调用向量的析构函数之前内存(堆)已损坏,则堆管理器此时可能只检测到损坏(释放由向量动态分配的结构或内部动态分配的字符串)。
在我看来,在Windows平台上处理这类错误的最佳方法是激活程序的整页堆。
您可以通过两种方式执行此操作:
启动此应用程序时将应用此设置。
然后在调试器(WindDbg或Visual Studio)下运行您的应用程序。如果在删除向量之前内存已损坏,则此时调试器应该会中断。
完成跟踪错误后,请不要忘记关闭整页堆。