http://bbs.csdn.net/topics/80249803
问题描述:
Debug Assertion Failed!
Program: d:\dd\err.exe
File:dbgheap.c
Line:1132
Expression: _CrtIsValidHeapPointer(pUserData)
err是我的程序.
程序是调用一个DLL, 在DLL的接口只添加一个参数char* op, 好奇怪的问题.
请各位在侠指点!
问题解答:
The _CrtIsValidHeapPointer function is used to ensure that a specific memory address is within the local heap. The “local” heap refers to the heap created and managed by a particular instance of the C run-time library. If a dynamically linked library (DLL) contains a static link to the run-time library, then it has its own instance of the run-time heap, and therefore its own heap, independent of the application’s local heap. When _DEBUG is not defined, calls to _CrtIsValidHeapPointer are removed during preprocessing.
如上文所述(MSDN):
_CrtIsValidHeapPointer确认内存地址在本地堆。……如果静态链接C运行库,那么,dll拥有一个独立于应用程序(调用它的exe)的本地堆。(所以你上面的程序会Debug Assertion Failed),如果没有定义_DEBUG,那么_CrtIsValidHeapPointer将被预处理器移除。
所以方法有二:
1、动态链接C运行库。
2、设置为release版本。