运行Microsoft Application Verifier时,我会在关机时收到错误0202
VERIFIER STOP 00000202:
pid 0x1160: Freeing heap block containing an active critical section.
11456F48 : Critical section address.
047D05B4 : Critical section initialization stack trace.
11456F40 : Heap block...(cut off)
调用GdiplusShutdown
时会发生错误。
从Application Verifier文档:
释放包含活动关键部分的堆块
Application Verifier中断消息
释放包含活动关键部分的堆块。大小的内存位置包含一个活动锁。
可能的原因
如果堆分配包含临界区,分配被释放且临界区未被删除,则会生成此中断。
Application Verifier显示的信息
- 参数1 - 关键部分地址
- 参数2 - 关键部分初始化堆栈跟踪
- 参数3 - 堆块地址
- 参数4 - 堆块大小
- 描述 - 释放包含活动关键部分的堆块
其他信息
验证者停止代码0202.
检查当前调用堆栈的内容。罪魁祸首通常是当前堆栈跟踪上的HeapFree或HeapDestroy的调用者。
此错误的频率很高。
要调试此停止,请使用以下调试器命令:
!cs –s parameter1
- 转储有关此关键部分的信息。ln parameter1
- 显示临界区地址附近的符号。这应该有助于识别泄漏的关键部分。dds parameter2
- 转储此临界区初始化的堆栈跟踪。parameter3 和 parameter4 可能有助于了解此堆块的分配位置(分配的大小可能很大)。
答案 0 :(得分:0)
在尝试关闭GDI +之前,请务必释放任何GDI +图像(例如GdipDisposeImage
)。
否则你泄漏一个关键部分,谁知道还有什么。当然不要尝试dispose an image after GDI+ has already been shutdown。