Sunday, March 05, 2023

Microsoft Visual C++ Runtime Library - Debug Assertion Failed!

Microsoft Visual C++ Runtime Library - Debug Assertion Failed!

Running an application in a debug environment throws the following assertion message.

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!

Program: x:\test\myapp.exe
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 996

Expression: __acrt_first_block == header

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

(Press Retry to debug the application)

---------------------------
Abort   Retry   Ignore   
---------------------------

In my specific case, this was caused by a string created in the heap by a DLL and freed in the executable.  The DLL was built using /MDd [Configuration Properties | C/C++ | Code Generation | Runtime Library = Multi-threaded Debug DLL (/MDd)] and the executable was built /MTd with MFC as static library [Configuration Properties | C/C++ | Code Generation | Runtime Library = Multi-thread Debug (/MTd)]/[Configuration Properties | Advanced | Use of MFC = Use MFC in a Static Library]. 

The fix/workaround is to change the executable to use MFC as a shared library [Configuration Properties | Advanced | Use of MFC = Use MFC in a Shared DLL]

//end

No comments:

SBCL Hello world

SBCL Hello, world! Version info: - OS: Windows 11 23H2 (Microsoft Windows [Version 10.0.22631.7079]) - Emacs: 30.2 - SBCL : 2.6.4 - SLI...