我正在處理一個非常棘手的問題,我現在已經堅持了一個星期。我打了一面非常堅硬的牆壁,額頭因撞擊而受傷,所以我希望有人能幫助我。由於源文件中存在未執行代碼而導致運行應用程序時發生崩潰 - C++
我正在使用Visual Studio 2005進行此項目 - 我已安裝2008,但在嘗試使用時遇到類似問題。
我們有一個應用程序目前正在對OpenCv1.1進行編譯,我試圖將它更新到2.2。當我們將靜態鏈接切換到新的庫時,應用程序崩潰 - 但僅在發佈模式下。所以動態鏈接和調試都可以正常工作。調用push_back
當
崩潰是std::vector
。
然後我想到了它運行的一些基本代碼在OpenCV中的正常工作,然後把該完全相同的代碼,並把它添加到我們的應用程序的樣本測試應用程序。該代碼失敗。
然後我去內臟的應用程序,它並沒有實例除了主界面和1類稱爲代碼的任何代碼的對象,它仍然墜毀。但是,如果我直接在主GUI中運行該代碼,則它工作正常。
我便開始註釋掉的應用程序的大量(在不應該被實例化的組件),並最終我的工作我的方式下來下來下來,直到......
我有了一個方法的類
void Foo()
{
std::vector<int> blah;
blah.begin();
}
如果此方法是在報頭中定義,測試代碼的工作,但如果這個代碼在CPP文件中定義,它崩潰。另外,如果我使用std::vector<double>
而不是int,它也可以。
然後我試着玩編譯器選項,如果我關閉了優化(/ Od)並將內聯函數擴展設置爲僅__inline(/ Ob1),即使代碼位於cpp文件中也可以工作。
當然,如果我們回到ungutted應用程序,並通過自己改變這些編譯器選項,它崩潰。
如果有人對此有任何見解,請告訴我。
謝謝, Liron
當你使用調試器完成它時,程序能夠完全加載或在它到達main(或WinMain)之前崩潰嗎?你的問題很有趣,因爲通常我發現動態鏈接比靜態鏈接到運行時更有問題 – greatwolf 2011-03-03 00:53:16
程序完全加載正常。然後我在(Qt)gui上按下一個按鈕,運行代碼調用opencv。如果代碼是正確的在按鈕按下它的作品,但如果代碼從另一個類中調用,它會崩潰。 – Liron 2011-03-03 01:17:30
我更新了項目,根本不創建gui,一旦我調用opencv代碼,它仍然崩潰。 – Liron 2011-03-03 02:08:09