99问答网
所有问题
请教各位大神有关c++ stack overflow错误
如题所述
举报该问题
推荐答案 2016-09-21
stackoverflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。或者解释为在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自编的代码了。比如如下这段程序:#includeintmain(){charname[8];printf("Pleasetypeyourname:");gets(name);printf("Hello.%s!",name);return0;}编译并且执行,输入ipxodiAAAAAAAAAAAAAAAA,执行完gets(name)之后,堆栈如下:内存底部内存顶部nameEBPret<-------[ipxodiAA][AAAA][AAAA]^&name堆栈顶部堆栈顶部由于我们输入的name字符串太长,name数组容纳不下,只好向内存顶部继续写'A'。由于堆栈的生长方向与内存的生长方向相反,这些'A’覆盖了堆栈的老的元素。'EBPret’都被'A'覆盖了。在main返回的时候,就会把'AAAA'的ASCII码:0x41414141作为返回地址,CPU会试图执行0x41414141处的指令,结果出现错误。这就是一次堆栈溢出!
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://99.wendadaohang.com/zd/WjBtWXzXXtjOvzBtzOO.html
其他回答
第1个回答 2016-09-21
#include #include #include//字符串拷贝函数头文件 class CMessageStack { private: int m_Point; // 现在消息存放的位置 char m_Message[ 2000 ][ 1000 ]; public: void MessageStack() // 构造函数,初始化类内部定义函数不需要加这个 CMessag...
相似回答
大家正在搜
相关问题
各位大神求请教,出现error 1722 错误怎么解决
请教各位大神:为何我的借呗停用
请教大神帮我解决下微信JSSDk接口签名错误的问题
请教一个关于OpenCV detectMultiScale函...
请教这样的错误时什么造成的
请教Javassist Enhancement failed...
请教Javassist Enhancement failed...
请教有个WebService的错误.非常危