繁体   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