從網上摘,整理的,自己遇到的問題,記錄一下。
從微軟站點:
檢查指針有效性
下面的示例使用 _CrtIsValidPointer 驗證給定的內存範圍對於讀或寫是否有效。
_ASSERTE(_CrtIsValidPointer( address, size, TRUE );
下面的示例使用 _CrtIsValidHeapPointer 驗證指針指向本地堆(由 C 運行時庫的這個實例創建和管理的堆;DLL 可以有它自己的庫實例,因而也可以有它自己的、位於應用程序堆之外的堆)中的內存。該斷言不僅捕捉空地址或超出邊界的地址,還捕捉指向靜態變量、堆棧變量和其他任何非本地內存的指針。
_ASSERTE(_CrtIsValidPointer( myData );
========
//從CSDN.NET
_CrtIsValidHeapPointer(pUserData)的問題:
_CrtIsValidHeapPointer確認內存地址在本地堆。……如果靜態鏈接C運行庫,那麼,dll擁有一個獨立於應用程序(調用它的exe)的本地堆。(所以你上面的程序會Debug Assertion Failed),如果沒有定義_DEBUG,那麼_CrtIsValidHeapPointer將被預處理器移除。
如果是:Debug Assertion Failed! 解決的方法有二:
1、動態鏈接C運行庫:
2、設置統一的Debug/Release版本(比如全部設置爲release版本);(ok)
如果“Assertion Failed”的話,估計程序是會出問題的.
James 16:48 2007-3-26