Run-Time Check Failure #2 - Stack around the variable 'inDevDlg' was corrupted.
最近做项目的时候,做一个类,需要再添加一个新的成员变量,
我做了的工作有:头文件中添加声明,构造函数中初始化,析构函数中析构,
在完成这些工作后,就是会出现一个中断,然后错误代码:Run-Time Check Failure #2 - Stack around the variable 'inDevDlg' was corrupted.
然后网上搜索资料,有说是 数组出界的,有说重复析构的,还有说改设置的。
最多看见的是:把 project->配置属性->c/c++->代码生成->基本运行时检查 为 默认值 就不会报本异常。具体原因正在研究中。。。如果改为其他就有exception。
但是之前一直没有尝试,总觉得我就是要在现在的这个设置下改过来,要不然要是我的程序到别人的电脑上岂不是就要出错了,难道还要一个个去改队员的程序设置么?于是一直没有尝试。
直到看到这篇文章:http://blog.csdn.net/jiangcaiyang123/article/details/6505270 (不知道是不是原作者,转载的太多,这是我找到的时间最早的一篇)
Project-> XX Properties -> C/C++ -> Code Generation -> Basic Runtime Checks -> Default Done! 就不会出现中断了!
附上文中对于如此设置的原因猜想:
关于MSDN的解释是在堆栈外面读写某数据。错误是名为RTC1的编译器检测的。又看了更多的技术文章,发现这样的错误是程序员在项目到了一定大的时候,它占用的堆栈量就比较大。我也深有体会。因为自己本来编写一个类,运行时没有错,但是在添加成员属性的时候,在其它方式不变的情况下就容易发生这样的错误。所以据此我猜应该是 VS2005(2008)在内部就限定了堆栈的大小,当项目足够大的时候,就会溢出。