今天遇到一个非常怪异的现象,在一个结构体中使用了一个verctor成员和一个vector数组,默认该2元素大小都为0,然后在运行时使用push_back添加元素,在Debug版本下,是没有任何问题的,可是到Release版本下,运行到push_back语句的时候。老是提示【Microsoft Visual Studio C 运行时库在XXXX.exe中检测到一个错误】,然后程序中断在
debughook.c
中函数
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
的_debugger_hook_dummy = 0;语句处。
其实出现这种莫名其妙的问题很头疼,先不说如何解决该问题,就连该问题产生的原因也是一无所知,根本就没有办法。
后来在一篇blog【http://blog.sina.com.cn/s/blog_782496390100rxzl.html】中,看到如下回复:
vc在release时,加入了迭代子检测;
程序可以强制修改_SECURE_SCL为0,就可以解决问题了;
然后我在stdafx.h中添加宏定义#define _SECURE_SCL 0,编译程序,还真解决了该问题。
其实到现在也还不知道什么是迭代子检测,但不管怎样,问题暂时是解决了,这些先记录下来,以后慢慢研究吧!