我正在使用Visual Studio 2005.在调试代码时,我收到以下错误消息,之后它正在添加break,
调试错误! 计划: - 检测到堆腐蚀:在正常块c#2368之后的0x01d21e30处。 CRT检测到应用程序在堆缓冲区结束后写入内存。
以上错误来自
delete values[i];
其中values
是(const wchar_t *)
的向量。
有谁知道这个错误来自哪里?
答案 0 :(得分:0)
这肯定是缓冲区写溢出的结果。这意味着在某个地方你正在写一个缓冲区而不是为它分配的缓冲区。
您可以使用std::wstring
代替普通缓冲区,这样就无需为您管理缓冲区。验证对缓冲区的每次写操作。
在删除时检测到溢出,因为堆管理器然后在调试模式下检查缓冲区开头和结尾的某些模式。
正如其他人建议的那样,还要注意匹配分配和解除分配: