调试“调试错误时检测到堆损坏”时出错

时间:2011-03-29 05:24:57

标签: debugging visual-c++ exception visual-studio-2005

我正在使用Visual Studio 2005.在调试代码时,我收到以下错误消息,之后它正在添加break,

  

调试错误!    计划: -    检测到堆腐蚀:在正常块c#2368之后的0x01d21e30处。 CRT检测到应用程序在堆缓冲区结束后写入内存。

以上错误来自

delete values[i];

其中values(const wchar_t *)的向量。

有谁知道这个错误来自哪里?

1 个答案:

答案 0 :(得分:0)

这肯定是缓冲区写溢出的结果。这意味着在某个地方你正在写一个缓冲区而不是为它分配的缓冲区。

您可以使用std::wstring代替普通缓冲区,这样就无需为您管理缓冲区。验证对缓冲区的每次写操作。

在删除时检测到溢出,因为堆管理器然后在调试模式下检查缓冲区开头和结尾的某些模式。

正如其他人建议的那样,还要注意匹配分配和解除分配:

  • new [] - >删除[]
  • new - >删除
  • malloc - > free(这是C并且在C ++中通常不是很有用)