您好,登錄后才能下訂單哦!
場景
將一個未曾初始化的結(jié)構(gòu)體作為參數(shù)傳遞給一個函數(shù),在運行時出現(xiàn)如上的錯誤,盡管沒有在函數(shù)中使用,但是依然需要進行結(jié)構(gòu)體的初始化,重申初始化的重要性
場景
查找所有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]是不夠的,會造成越界訪問
場景
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對象的方式解決了該問題。
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
解決
項目平臺:Win32
在鏈接器>>系統(tǒng)>>子系統(tǒng)中選擇了WindowsCE(/SUBSYSTEM:WINDOWSCE)
應(yīng)該是Windows(/SUBSYSTEM:WINDOWS)
程序崩潰彈窗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
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。