C++长度错误异常不能被获取,
但如果我写:
std::string s; s.resize(-1);
__cxa_throw不能抓住它; 我想知道为什么以及如何解决它。
更新:抱歉,不完整的描述。我的目的是知道崩溃堆栈时
std::string s; s.resize(-1);
被调用。 如果它没有抛出任何异常,我该怎么办?
对不起,我忘了附上图片。 第一页
std::string s; s.resize(-1);
第二个是
throw "something happen"
的std::string::resize成员函数不会在你的情况下抛出一个异常,因为整数文字的总是将-1
转换为最大无符号值o f std::size_t
类型,这是函数接受的内容,可能导致32位平台的4294967295
或64位平台或类似平台上的18446744073709551615
。可抛出的例外是std::length_error。这SO帖子有更多的信息:
Using -1 as a flag value for unsigned (size_t) types
感谢您的回答,我修改了这个问题,希望您能告诉我该怎么做。 – user8751745
我不太确定是否有任何异常抛出,所以我困惑了为什么函数__cxa_throw无法捕捉它。其实这个系统似乎没有被称为功能。 – user8751745
'__cxa_throw'如何参与*捕捉异常?你能展示一些你用来测试的代码吗? –
“__cxa_throw无法抓住它”是什么意思?并请张贴您用来追踪它的代码。 – bolov
第一个和第二个代码示例之间的连接是什么? – 2017-10-10 10:48:46