解决一个运行时错误的问题

解决由于程序删除内存方式写得不恰当导致的运行时错误。

  • 使用调试运行程序时弹出断言错误,以下是调试信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 01B20000, 2F6AE020 )
    Debug Assertion Failed!

    File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
    Expression: _CrtIsValidHeapPointer(block)

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)
  • 看到关键部分HEAP[xxx.exe]_CrtIsValidHeapPointer,估计是堆内存出错,程序操作堆内存,一般是使用了malloc,free,new,delete等操作;

  • 考虑到程序使用了FFmpeg删除视频资源弹出的错误,就联想到可能是删除操作不正确;
  • 最后查明原因为av_malloc申请内存却用delete删除,修正为av_free删除即可。