【问题标题】:This may be due to a corruption of the heap, which indicates a bug in cvector.exe or any of the DLLs it has loaded这可能是由于堆损坏,这表明 cvector.exe 或其已加载的任何 DLL 中存在错误
【发布时间】:2010-07-12 08:40:39
【问题描述】:

我在测试程序中犯了很多错误!!!

调试源:http://www.cppblog.com/Files/mymsdn/cvector-windows-has-triggered-a-breakpoint-in-cvector.zip

正确的版本:http://www.cppblog.com/Files/mymsdn/cvector-svn-version-10.zip

我正在尝试编写向量结构的 C 语言版本。

如果我尝试运行(在 Microsoft Visual Studio 2008 中,默认快捷键是 CTRL+F5)我的代码。它可以作为正确的逻辑执行以输出正确的结果。

但如果我尝试在调试模式下运行它(在 Microsoft Visual Studio 2008 中,默认快捷键是 F5)。它会导致一个问题:(它来自输出窗口,并且还有一个警报框架来报告它)

HEAP[cvector.exe]: HEAP: Free Heap block 393168 在被释放后修改为 393190 Windows 在 cvector.exe 中触发了断点。

这可能是由于堆损坏,这表明 cvector.exe 或其已加载的任何 DLL 中存在错误。

这也可能是由于用户在 cvector.exe 获得焦点时按 F12。

输出窗口可能有更多的诊断信息。


(来源:cppblog.com

【问题讨论】:

  • 如果我们要帮助您,您需要向我们提供一些示例代码或更多信息。
  • 可能你在释放指针后使用它。您应该发布您的代码,以便我们查看问题所在。

标签: c memory-leaks free


【解决方案1】:

这个错误意味着你写入了一个你实际上并不“拥有”的内存地址——例如,你在内存被释放后写入了内存,或者在你用newmalloc实际分配的区域之外,或者通过一个完全错误的指针。

【讨论】:

    【解决方案2】:

    检查您的调试设置。关闭“非托管代码调试”和“SQL Server 调试”。

    当我使用 Oracle 组件获得此功能时,这对我很有用。如果我继续点击继续,则没有中断错误,程序继续运行。关闭这些调试选项让它继续运行,程序现在可以运行了。

    【讨论】:

    • 这并没有让这个错误消失,它只是把它藏在了地毯下!您所做的只是关闭调试器中的功能,该功能会在您损坏堆时向您发出警告 - 损坏仍然存在,就像地雷一样等待下次其他代码尝试使用该堆区域时爆炸。
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2011-04-24
    • 2014-01-01
    相关资源
    最近更新 更多