您好,登錄后才能下訂單哦!
場景
將一個未曾初始化的結構體作為參數傳遞給一個函數,在運行時出現如上的錯誤,盡管沒有在函數中使用,但是依然需要進行結構體的初始化,重申初始化的重要性
場景
查找所有xxx的引用,仔細推敲任何一處可能導致的數組越界問題,經常出現的情況:
1
char szName[10] = {"hello,world"};
char szCopy[8] = {0};
strcpy(szCopy, szName);
2
char szStr[2]= {0};
sprintf(szStr, "%d", 12);
那么被寫入szStr的數據長度應該為3(請不要忘記了'\0'),char[2]是不夠的,會造成越界訪問
場景
release版本啟用最大化速度O2,運行沒有問題。禁用優化Od,情況下出現如下的錯誤:在已損壞了程序內部狀態的test.exe中發生了緩沖區溢出。該問題并不是在執行代碼的時候,出現的問題,而是在程序退出,系統進行清理的時候出現的問題。此時調用的堆棧終端在一下的代碼:中斷在gs_report.c文件的298行位置(_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE),如下:
#if defined(_CRTBLD) && !defined(_SYSCRT)
DebuggerWasPresent = IsDebuggerPresent();
_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE);
#endif
并不是在執行用戶代碼的時候出現的異常。
解決思路
從后往前屏蔽代碼,尋找引起問題的根源。
問題根源
定位到在棧上生成一個類的對象,就會導致該問題。sizeof該類,長度值是1257,功能是大數據的搜索,是該類導致棧溢出了,所以使用動態new對象的方式解決了該問題。
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
errorLNK2001: 無法解析的外部符號___ImageBase LIBCMT.lib
解決
項目平臺:Win32
在鏈接器>>系統>>子系統中選擇了WindowsCE(/SUBSYSTEM:WINDOWSCE)
應該是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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。