C++长度错误异常不能被获取,

问题描述:

C++长度错误异常不能被获取,

但如果我写:

std::string s; s.resize(-1); 

__cxa_throw不能抓住它; 我想知道为什么以及如何解决它。

更新:抱歉,不完整的描述。我的目的是知道崩溃堆栈时

std::string s; s.resize(-1); 

被调用。 如果它没有抛出任何异常,我该怎么办?

对不起,我忘了附上图片。 第一页

std::string s; s.resize(-1); 

第二个是

throw "something happen" 

enter image description here

enter image description here

+6

'__cxa_throw'如何参与*捕捉异常?你能展示一些你用来测试的代码吗? –

+0

“__cxa_throw无法抓住它”是什么意思?并请张贴您用来追踪它的代码。 – bolov

+0

第一个和第二个代码示例之间的连接是什么? – 2017-10-10 10:48:46

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

+0

感谢您的回答,我修改了这个问题,希望您能告诉我该怎么做。 – user8751745

+0

我不太确定是否有任何异常抛出,所以我困惑了为什么函数__cxa_throw无法捕捉它。其实这个系统似乎没有被称为功能。 – user8751745