我有這樣的代碼:例外在C++的問題
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
但是當我運行它和GetFiles
崩潰,它仍然報告未處理的異常。爲什麼?
我有這樣的代碼:例外在C++的問題
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
但是當我運行它和GetFiles
崩潰,它仍然報告未處理的異常。爲什麼?
因爲您只能捕獲int
類型的例外情況。
使用catch(...)
來捕捉任何類型的異常。
我認爲所有的異常都可以轉換爲int。謝謝。 – 2011-03-21 16:40:21
我相信「未處理的異常」在Windows中也用於表示內存保護錯誤,並不總是與C++異常相同的東西,這正是您想要捕捉的地方。
可能你傳入的路徑中有一些垃圾數據。如果路徑沒問題,那麼你需要確保你能捕獲到函數可能拋出的所有類型的異常,而不僅僅是int
。
據MSDN,GetFiles
可以拋出以下例外:
IOException
UnauthorizedAccessException
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
你不抓任何人。唯一例外的是int
,不能被GetFiles
拋出。要解決此問題,要麼增加對上述各例外的catch語句,並適當地處理它們,或使用省略號來捕獲所有異常:
try {
files = Directory::GetFiles(path);
} catch(...) {
MessageBox::Show("Error getting files.");
return 0;
}
在catch(...),使用正確的相應的異常類型,而不是int。 – moala 2011-03-21 16:31:47
你究竟扔什麼 - 一個int?一個int指針?一些不是int的東西? – Rup 2011-03-21 16:31:59