新聞中心
1 Run-Time Check Failure: being used without being defined
場景
將一個未曾初始化的結(jié)構(gòu)體作為參數(shù)傳遞給一個函數(shù),在運行時出現(xiàn)如上的錯誤,盡管沒有在函數(shù)中使用,但是依然需要進行結(jié)構(gòu)體的初始化,重申初始化的重要性
2 Run-Time Check Failure Stack around the variable'xxx'was corrupted
場景
查找所有xxx的引用,仔細推敲任何一處可能導(dǎo)致的數(shù)組越界問題,經(jīng)常出現(xiàn)的情況:
1
char szName[10] = {"hello,world"};
char szCopy[8] = {0};
strcpy(szCopy, szName);
2
char szStr[2]= {0};
sprintf(szStr, "%d", 12);
那么被寫入szStr的數(shù)據(jù)長度應(yīng)該為3(請不要忘記了'\0'),char[2]是不夠的,會造成越界訪問
3 在已損壞了程序內(nèi)部狀態(tài)發(fā)生了緩沖區(qū)溢出
場景
release版本啟用大化速度O2,運行沒有問題。禁用優(yōu)化Od,情況下出現(xiàn)如下的錯誤:在已損壞了程序內(nèi)部狀態(tài)的test.exe中發(fā)生了緩沖區(qū)溢出。該問題并不是在執(zhí)行代碼的時候,出現(xiàn)的問題,而是在程序退出,系統(tǒng)進行清理的時候出現(xiàn)的問題。此時調(diào)用的堆棧終端在一下的代碼:中斷在gs_report.c文件的298行位置(_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE),如下:
#if defined(_CRTBLD) && !defined(_SYSCRT)
DebuggerWasPresent = IsDebuggerPresent();
_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE);
#endif
并不是在執(zhí)行用戶代碼的時候出現(xiàn)的異常。
解決思路
從后往前屏蔽代碼,尋找引起問題的根源。
問題根源
定位到在棧上生成一個類的對象,就會導(dǎo)致該問題。sizeof該類,長度值是1257,功能是大數(shù)據(jù)的搜索,是該類導(dǎo)致棧溢出了,所以使用動態(tài)new對象的方式解決了該問題。
4 unresolved external symbol __ImageBase
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
解決
項目平臺:Win32
在鏈接器>>系統(tǒng)>>子系統(tǒng)中選擇了WindowsCE(/SUBSYSTEM:WINDOWSCE)
應(yīng)該是Windows(/SUBSYSTEM:WINDOWS)
5 this application has requested the runtime to terminateit in an unusual way
程序崩潰彈窗this application has requested the runtime to terminate it inan unusual way.
please contact the aplication's supportteam for more information
嘗試方案
cd %windir%\system32
Regsvr32 Msxml3.dll
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前題目:VC程序崩潰異常處理集錦-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://fisionsoft.com.cn/article/goeds.html