簡體   English   中英

C ++異常在Xmemory代碼中引發

[英]C++ exception being thrown deep in xmemory code

調用向量的push_back方法時,將引發C ++異常。 在調試器中,似乎在xmemory文件中引發了異常。 這是發生異常的地方:

// 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異常,那可能是怎么回事?

xmemory標頭是標准C ++庫的Dinkumware實現的實現細節(例如,隨MSVC ++一起提供)。 實際錯誤不太可能與此特定功能相關。 我不知道宏_DESTRUCTOR擴展為什么(使用-E或/ E編譯器標志,您可以找到),但是它肯定會調用所涉及類型的析構函數。 我將查看此宏引發什么異常,或者檢查我的析構函數是否可能引發異常。 另外,要更好地處理異常可能是什么,請嘗試捕獲std::exception const& ,因為建議拋出的每個異常都源自該類型。 對於標准C ++庫拋出的所有異常,這絕對是正確的。 但是,某些系統由於未定義的行為而引發異常,這可能不是源自std::exception (例如,當您的代碼最終多次釋放內存時)。 不幸的是,不遵循從std::exception派生的建議,不幸的是調試異常要困難得多。 當你抓住一個std::exception const&可以使用what()成員std::exception ,找出它在做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM