2012-10-09 44 views
0

我有一個Visual Studio 2008解決方案,它由一些項目組成,並使用dll和他們的頭文件。在調試版本中(解決方案)運行得非常好。在發佈版本中,它成功編譯,但在執行某些在dll文件中定義的函數時會失敗。visual studio 2008解決方案發布版運行時間致命錯誤

正如我所說的,該解決方案在調試模式下正常工作,並正確設置選項。試圖關閉
優化,打開調試信息,它沒有幫助。什麼可能是問題的原因?

+0

什麼是錯誤?嘗試把__declspec(dllexport)void fn(..) –

+1

最有可能導致調試和發佈之間行爲不同的錯誤是未初始化的變量。 – john

+0

http://www.flounder.com/debug_release.htm –

回答

0

我以前見過很多次這種情況。在幾乎每一個案例這個問題被發現寫入數組或其他數據結構時出現越界錯誤。在其他情況下,正在使用未初始化的變量。

您的代碼中存在一個錯誤。這是確定的。當你在Debug設置下編譯時,編譯器爲你做了很多東西來掩蓋某些類型的問題。編譯器會編寫代碼來初始化一些東西,掩蓋未初始化的變量問題。

我將嘗試的第一件事是將警告級別設置爲最高設置。無論如何,你應該一直這樣做。這通常會揭示問題。只要確保修復了編譯器告訴你的問題。不要用#pragma或純粹的演員掩蓋他們。下一步通過您的代碼來隔離問題。這可能是困難和耗時的,但有一線希望。無論問題出在哪裏,重複錯誤的可能性與識別和修復錯誤的時間和難度成反比。 :)

+0

是的,我現在意識到我有一個名爲deviceList的變量,類型爲vector ,其中'device'是一個結構。這似乎是造成大部分問題的原因。我在一個類中聲明瞭它,但據我所知,STL類「vector」調用它的構造函數來初始化deviceList。在這裏看不到任何錯誤。或者編譯器是否可以因爲優化而忽略聲明? – Nabijon

+1

@Nabijon:極不可能。只是想出了這個*編譯器*的任何想法。 –

相關問題