2012-02-14 385 views
0

當向量的push_back方法被調用時,會引發C++異常。在調試器中,看起來這個異常是在xmemory文件中深入拋出的。這裏就是我看到了異常發生:在xmemory代碼中拋出的C++異常

// TEMPLATE FUNCTION _Destroy 
template<class _Ty> inline 
void _Destroy(_Ty _FARQ *_Ptr) 
{ // destroy object at _Ptr 
    _DESTRUCTOR(_Ty, _Ptr); 
} 

這並不似乎是一個bad_alloc異常,因爲我試圖用一個bad_alloc的catch處理包裹在一個try-catch代碼。代碼在那裏做了那一步。它總是進入(...)catch處理程序。如果它不是bad_alloc異常,那麼會發生什麼?

+0

您是否遵循[三規則](http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))? – 2012-02-14 22:05:12

+1

對象的類型是什麼?什麼是異常的類型?我猜你在這裏顯示的函數不是異常的起源,因爲析構函數很少會拋出異常。 (如:從不) – 2012-02-14 22:18:49

回答

0

xmemory標頭是標準C++庫(例如使用MSVC++發佈)的Dinkumware實現的實現細節。實際的錯誤不太可能與這個特定的功能有關。我不知道宏_DESTRUCTOR擴展到了什麼(使用-E或/ E編譯器標誌可以找到),但它肯定會調用相關類型的析構函數。我會看看這個宏拋出什麼異常,或者檢查我的任何析構函數是否可能拋出異常。此外,爲了更好地處理異常情況,請嘗試捕獲std::exception const&,因爲建議拋出的每個異常都來自此類型。對於標準C++庫引發的所有異常,這肯定是正確的。但是,由於未定義的行爲可能導致某些系統拋出異常,這些行爲可能不是源自std::exception(例如,當您的代碼最終釋放多次內存時)。不遵循這個從std::exception得出的建議,不幸的是調試異常比較困難。當您發現std::exception const&時,您可以使用std::exceptionwhat()成員來了解它正在做什麼。