遭遇應用程式正常初始化失敗

來源:互聯網
上載者:User

案例一:
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存在對錯誤。真是莫名其妙。

 

案例三:
重寫了tsGUI的部分介面,然後寫了一個test控制台測試案例。一直用著好好的,可是突然某一次編譯運行就不行了,怪了 tsGUI我也沒改啥啊,就算改動也是在正常範圍之內啊。
出錯提示:
windows 已在 test.exe 中觸發一個斷點。
其原因可能是堆被破壞,這也說明 test.exe 中或它所載入的任何DLL 中有 Bug。

輸出視窗:
test.exe 中的 0x7c92e470 處最可能的異常: 0xC0000005: 讀取位置 0x00000130 時發生存取違規
R6034
An application has made an attempt to load the C runtime library without using a manifest.
This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest.
For more information, see the "Visual C++ Libraries as Shared Side-by-Side Assemblies" topic in the product documentation.
Windows 已在 test.exe 中觸發一個斷點。

其原因可能是堆被損壞,這也說明 test.exe 中或它所載入的任何 DLL 中有 bug。

#if defined (_CRT_CHECK_MANIFEST)<br /> if (!_check_manifest(hDllHandle))<br /> {<br /> __try<br /> {<br /> _NMSG_WRITE(_RT_CHECKMANIFEST);<br /> }<br /> __except( EXCEPTION_EXECUTE_HANDLER )<br /> {<br /> OutputDebugString(_GET_RTERRMSG(_RT_CHECKMANIFEST));<br /> DebugBreak();<br /> }</p><p> _ioterm(); /* shut down lowio */<br /> _mtterm(); /* free TLS index, call _mtdeletelocks() */<br /> _heap_term(); /* heap is now invalid! */<br /> return FALSE;<br /> }<br />#endif /* defined (_CRT_CHECK_MANIFEST) */

通過看提示,看崩潰點,好像是manifest的問題,修改項目屬性 清單工具 - 常規 - 使用fat32解決方案 重新編譯OK。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.