2011-10-04 82 views
9

有沒有一種方法允許在拋出異常之後執行壞塊代碼?C++,忽略異常並繼續執行代碼?

目前,我的代碼有連續運行的while循環。此while循環內的代碼有時會拋出向量超出範圍的錯誤。我一直無法找到這個特殊異常的原因,但最終它並不重要,因爲while循環內的代碼一遍又一遍地做同樣的事情,下一次迭代不依賴於以前的迭代任何方式。

此,while循環崩潰中的代碼後,我想它從while語句的頂部重新開始。

有沒有辦法在C++中做到這一點? try/catch在這種情況下似乎不起作用。

附加信息: 我很想在while循環中取代碼,將其放入自己的可執行文件中,並將while循環放入bash腳本中,但每次迭代都需要保持靜態的一些數據需要太多的時間來重新加載,每次數據,所以我被迫做了我的無限while循環內C++

+2

在循環的範圍'catch'異常,並從那裏繼續。但是,你真的需要找到問題的根源。 – Chad

+0

你可以請張貼一些代碼來看看嗎?嘗試{} catch(){}應該是標準的,如果你想要一個強大的應用 – user710502

+0

異常是例外,應該處理。即使你找不到問題。 – Griwes

回答

12

你只需要抓住while循環中的例外:

while(true) 
{ 
    try 
    { 
      // your code 
    } 
    catch (Exception e) { /* Please, at least do some logging or other error handling here*/ } 
} 
+1

'} catch(std :: out_of_range&exc){std :: cerr << exc.what(); }' –

+0

缺少該catch中的異常類型。我建議'趕上(...)',因爲他的追趕動機不是很好的設計。 –

+2

這是甚至有效的語法?當我在'catch'後面嘗試沒有任何圓括號的try catch語句時,我得到'error:expected'(''''token''' – HelloGoodbye

1

的第一件事你應該做的是調試的代碼,對於th您可以在調試器中運行代碼並診斷問題所在。在地毯下推動問題不會讓它消失,程序仍然是越野車。

如果在另一方面,這個問題是什麼是真正特殊但可行的(考慮打開一個文件,通過網絡發送數據包時,任何可能失敗,但預計不會--as相比於一些應該從未發生),則try/catch辦法應該工作。

0

,如果你可能發佈的代碼片段,我們都可以幫你。 但一般你應該總是有某種錯誤處理,無論是一個嘗試{}趕上{}或只檢查一個變量一樣的:

while(true) 
{ 

if(flag == "Error") 
{ 
//error handle 
} 

else 
{ 
//continue with code execution 
} 

} 

希望你得到這個問題解決了!