msvcr90.dll!_invalid_parameter_noinfo() Line 125 + 0xc bytes 的排错

来源:互联网 发布:mac pro 15寸 编辑:程序博客网 时间:2024/04/29 08:27

如题。当dump定位到这个地方时,有理由怀疑是下标访问string时越界了。

我们先看Checked Iterators中的例子。

 
这里vector访问越界,catch会抓到异常。但是如果把vector换成string:

 

却什么也catch不到,Release版直接crash。通过dump定位到如题的错误。为什么呢?

看一下string::operator[]()的实现。它在Microsoft Visual Studio 9.0/VC/crt/src/xstring中:

 

_SCL_SECURE_VALIDATE_RANGE是在/VC/include/yvals.h中定义的:

 

只要能走到红色位置,就可以和vector一样抛出out_of_range异常,可惜却没有。经跟踪,发现是_SECURE_SCL_THROWS宏在搞鬼。

 

可是我明明 #define _SECURE_SCL_THROWS 1 了啊。过一段时间有机会再查吧。