none
内存重复释放的错误如何定位呢? RRS feed

  • 问题

  •         使用VS2013开发一个多模块的程序,在关闭程序是出现这样的错误:
    HEAP[DeskTopApp.exe]: HEAP: Free Heap block 1afe4958 modified at 1afe4984 after it was freed

            大致可以 知道这是内存重复释放造成的。查看堆栈都找不到错误发生的地方。定位错误代码的难度在于关闭exe程序后释放的,不一定是自己编写的模块造成的,也有可能是其它人编写的模块,而你没这些模块的源码。那么如何定位这些错误的代码呢?

    前无古人,后无来者

    2017年11月30日 9:53

全部回复

  • 用Process Explorer打开并执行您的程序,查看它载入了哪些程序和DLL,初步定位到哪个程序的问题。

    其它人写的程序而又没有代码,是无法定位到代码的。可以通过修改自己的程序,将这些异常消化掉(catch)。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年12月1日 0:52
  • Hi clever101吗,

    感谢在MSDN论坛发帖。

    >>大致可以 知道这是内存重复释放造成的。查看堆栈都找不到错误发生的地方。定位错误代码的难度在于关闭exe程序后释放的,不一定是自己编写的模块造成的,也有可能是其它人编写的模块,而你没这些模块的源码。那么如何定位这些错误的代码呢?

    这里有篇文档关于使用CRT library来查看heap信息。你可以参考一下。

    https://msdn.microsoft.com/en-us/library/974tc9t1.aspx?f=255&MSPPError=-2147217396

    或者你可以使用一些工具,例如Application Verifier和Debugdiag。

    https://blogs.msdn.microsoft.com/lagdas/2008/06/24/debugging-heap-corruption-with-application-verifier-and-debugdiag/

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已建议为答案 Baron Bi 2017年12月12日 7:10
    2017年12月1日 8:10