调用向量的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异常,那么可能会发生什么?
答案 0 :(得分:0)
xmemory
标头是标准C ++库的Dinkumware实现的实现细节(例如,使用MSVC ++发布)。实际错误不太可能与此特定功能相关。我不知道宏_DESTRUCTOR
扩展到什么(使用你可以找到的-E或/ E编译器标志),但它肯定会调用相关类型的析构函数。我会看看这个宏抛出的异常,或者检查我的析构函数是否会抛出异常。另外,为了更好地处理异常,请尝试捕获std::exception const&
,因为建议抛出的每个异常都来自此类型。对于标准C ++库抛出的所有异常,这绝对是正确的。但是,某些系统因未定义的行为而导致异常,这些行为可能不是来自std::exception
(例如,当您的代码最终释放多次内存时)。不遵循这个从std::exception
派生的建议会让调试异常变得更加困难。当您发现std::exception const&
时,您可以使用what()
的{{1}}成员来了解它的作用。