案例一:
2009.11月某日的案例 stereocamera專案
(某個全域性物件初始化的時候,memset越界導致堆錯誤導致的)
很奇怪的問題。 周五臨下班時,發stereocamera.dll的版本。
從vss上down下最新的**,編譯,連線,執行,!!!應用程式正常初始化失敗! faint!換了放到pc目錄下,也是失敗。
單步除錯吧,還沒進入main()函式之前就提示 應用程式正常初始化失敗! 看來原因應該出現在進入main函式之前的**,也就是在執行某些全域性變數建構函式的時候,接著查詢,發現問題出現在trace()的建構函式裡,因為stereocamera的建構函式裡構造了 trace物件,而stereocamera是個全域性的靜態變數。
接著定位,定位到了 malloc2d函式,但是,從崩潰現場來看,**的邏輯每一點問題,malloc的記憶體也不是很大,怎麼會失敗呢?
出錯地方類似於下面的** new int[10], new跑出了 bad_alloc 異常。
從邏輯上分析,應該不是記憶體不足的問題,因為通過任務管理器檢視也沒有什麼問題。
難道是全域性變數的初始化裡不應該執行太多的new操作?(也就是在進入main之前不能執行太多的malloc操作?)試著把夠著函式裡面的new trace**移到了普通成員函式裡,測試,還是不行。
看來這問題比較複雜。無奈**不是自己寫的。哎。
最後找來**原作者,發現問題,某個memset的時候記憶體越界,這導致破壞了系統的記憶體,導致了bad_alloc
案例二:
2009.11月某日的另乙個案例。led_calibration專案
(沒有使用原始版本的sln解決方案檔案檔案導致)
之前一直在筆記本下,現在使用台式電腦後,很多**都需要從vss上down下來。
今日down了最新的 led_calibration**,刪除掉sln解決方案,自己建了乙個解決方案,然後編譯、執行,彈出:應用程式初始化失敗!奇怪,之前都好好的程式會失敗!
而且vc2005提示 該程序載入的某個dll中存在堆錯誤,導致載入失敗!
鬱悶,然後換了小趙電腦,從新down下vss上的**,這次沒有刪掉sln,直接使用vss上down下的sln(雖然sln檔案你直接雙擊打不開,但是可以先開啟vc2005然後把sln檔案拖進來),編譯,執行,ok!
我靠,好奇怪的問題哦。 然後回到自己的台式電腦上,down下vss上的sln檔案,編譯、執行,我靠,也好了!
你說怪不怪? 而且當初vc2005還像模像樣的給我提示某個dll存在對錯誤。真是莫名其妙。
其原因可能是堆被損壞,這也說明 test.exe 中或它所載入的任何 dll 中有 bug。
通過看提示,看崩潰點,好像是manifest的問題,修改專案屬性 清單工具 - 常規 - 使用fat32解決方案 重新編譯ok。
BLE應用程式初始化
應用程式初始化分為兩個階段 其中,peripheral osal呼叫 bleperipheral init 函式,這一初始化函式設定gap任務配置檔案引數 gap特性 gap繫結管理引數 gatt配置檔案引數,通過設定乙個作業系統虛擬層的sbp start devic evt事件來觸發第二階段初始化...
應用程式正常初始化(0xc0150002)失敗
寫了乙個vc6下的mfc程式,結果拷貝到另一台機子上出現了應用程式正常初始化 0xc0150002 失敗的問題。然後開啟事件檢視器,找到了如下資訊 找不到附屬彙編 microsoft.vc80.debugcrt,上乙個錯誤是 參照的彙編沒有安裝在系統上。resolve partial assembl...
Windows應用程式初始化過程
windows 應用程式必須有乙個入口點函式,應用程式開始執行時,這個函式會被呼叫。c c 開發人員可以使用以下兩種入口點函式 int winapi twinmain hinstance hinstance,hinstance,ptstr pszcmdline,intncmdshow int tma...