我有一個C++應用程序內置MS Visual Studio 2005鏈接到第三方庫。對於某個輸入,應用程序在第三方庫中崩潰(顯然在realloc.c中的某處;因此必須是某種內存問題)。我在發佈中運行,因爲輸入是巨大的。所以我跑了,直到它崩潰,然後選擇調試。當我單獨調試有罪功能時,我希望使用一些異常處理來防止應用程序崩潰,而不是乾脆地退出。所以我用了類似的東西:MS Visual Studio 2005 C++異常處理
try {
//- call 3rd party application function that fails
}
catch(...) {
//- handle exception or whatever
Logger::Fatal("Fatal error: Exiting...");
return false;
}
但令我驚訝的是,應用程序仍然崩潰!我期待看到它顯示錯誤消息,因爲我大概已經用省略號(...)捕獲了所有異常;我在這裏錯過了什麼?我甚至嘗試在項目屬性 - > C/C++ - >代碼配置 - >啓用異常處理中設置/ EHca(was/EHsc)。在有關可能導致問題的相關說明中,以下用法是否正確?
my_class* mc[] = {nil, nil, nil};
for (int i = 0; i < 3; ++i) {
mc[i] = new my_class();
//-Do stuff with mc[i]
if (mc[i] != nil) {
delete mc[i];
mc[i] = nil;
}
}
未能獲取異常處理工作是相當令人費解。我當然會欣賞C++大師們的想法/見解。順便說一句,同樣的問題也發生在Linux(RHEL5),但我目前正試圖讓異常處理在Windows上工作。
注:當我讓它調試後墜毀。我確實收到「訪問衝突......無法讀取位置」消息。有了這個更新的信息,我希望在C++中的某些東西仍然可以在Windows上運行,用於這種崩潰的Linux操作系統。
好像你期待一個'C'功能在這裏拋出異常。 –
嗯...它可能的第三方應用程序調用C函數是有罪的。但是,你的意思是不行嗎?那麼我怎麼能從C++中處理這些異常? –
除非你知道拋出了一個異常,你怎麼能捕捉到它呢?也許第三方庫只是崩潰而不會拋出任何異常。您需要確保第三方庫發出異常。 –