2 dawn blossom dawn_blossom 于 2015.07.09 13:57 提问

缓冲区溢出。按“中断”以调试程序,或按“继续”以终止程序。

程序调试的时候提示“在已损坏了程序内部状态的XXX.exe 中发生了缓冲区溢出。按“中断”以调试程序,或按“继续”以终止程序” 程序定位到 _CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE);请问这是什么原因呢?

7个回答

91program
91program   Ds   Rxr 2015.07.09 13:59

指针越界了,或者使用的堆栈溢出

dawn_blossom
dawn_blossom   2015.07.09 14:04

问题是无法定位到是哪越界呢 使用VS2008编译的

caozhy
caozhy 按中断,打开VS,会停在出错的行
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.09 14:05

一般是你指针越界,或者忘记分配内存造成的。

caozhy
caozhy   Ds   Rxr 2015.07.09 14:06

另外就是调用了一些不安全的函数,比如如下代码:

char * des = new char[10];
strcpy(des, src);
如果原始字符串长度有100个,那么strcpy就不会检查des的大小,结果就是溢出了。

dawn_blossom
dawn_blossom   2015.07.09 14:10

在 InitInstance() 最后return 的时候报错了

#if defined (_CRTBLD) && !defined (_SYSCRT)
DebuggerWasPresent = IsDebuggerPresent();
_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE);

dawn_blossom
dawn_blossom   2015.07.09 14:40

感谢各位,问题已经解决了,是我的数组设置的长度太小,越界了。总结来看,不能把眼光总是聚焦在出错点,要有怀疑的点,然后调试排查问题。

frank_20080215
frank_20080215   2015.07.09 15:19

指针越界,或者忘记分配内存,或写到系统内存

Csdn user default icon
上传中...
上传图片
插入图片