stack overflow通常是什么原因照成的?

在程序的某一行调用了一个函数aaa,然后它提示调用这一行stack overflow。这通常是什么原因照成的,求科普。

stack overflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自编的代码了。
比如如下这段程序:
#include<stdio.h>
int main()
{
char name[8];
printf("Please type your name:");
gets(name);
printf("Hello.%s!",name);
return 0;
}
编译并且执行,输入ipxodiAAAAAAAAAAAAAAAA,执行完gets(name)之后,堆栈如下:
内存底部 内存顶部
name EBP ret
<-------[ipxodiAA][AAAA][AAAA]............
^&name
堆栈顶部 堆栈顶部
由于我们输入的name字符串太长,name数组容纳不下,只好向内存顶部继续写'A'。由于堆栈的生长方向与内存的生长方向相反,这些'A’覆盖了堆栈的老的元素。'EBP ret’都被'A'覆盖了。在main返回的时候,就会把'AAAA'的ASCII码:0x41414141作为返回地址,CPU会试图执行0x41414141处的指令,结果出现错误。这就是一次堆栈溢出!
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-13
堆栈溢出,申请地址超过堆栈的大小。有可能是递归没有结束条件,或结束条件太难实现。这种情形时,可以把递归改为循环。或者是你申请没有释放,或者申请太大(应该是申请大小的参数有误)

stack overflow怎么引起的啊?
堆栈溢出。一般是两种原因:①堆栈内已被填满元素,你再往里填就会溢出。②堆栈内虽然没有填满元素,但是堆栈指针越界了。

电脑出现stack overflow at line 0是什么意思
电脑出现stack overflow at line 0,是设置错误造成的,解决方法如下:1、首先打开电脑,在电脑桌面上双击运行浏览器,如下图所示。2、在浏览器首页,单击上方右侧的【设置】图标,如下图所示。选择下拉菜单的【Internet选项】。3、弹出Internet选项窗口,单击【高级】选项卡,如下图所示。4、在选项卡下...

stack overflow出错是什么原因?
答案:系统在此应用程序中检测到基于堆栈的缓冲区溢出错误。这是一个常见的编程错误,可能会导致程序崩溃或执行非法操作。下面进行详细解释。解释如下:一、堆栈缓冲区溢出的基本概念 堆栈缓冲区溢出是指程序在运行过程中,由于操作不当导致数据超出了为其分配的堆栈内存空间,从而覆盖相邻内存区域的一种错误。

IE上网时提示stack overflow at line:0的三种解决办法
在用IE上网时,有时会出现stack overflow at line:0这样的提示,遇到这种情况该如何办?这是堆栈溢出。IE的数据存储变量超出了系统分配的堆栈,就会有这种提示,通常是脚本调试,或是动态链接文件错误引起。方法一:解决方法,先从开始菜单中打开控制面板程序,在控制面板界面中,设置查看方式为大图标,选择...

为什么程序员都喜欢上StackOverflow
1.Stack是英语“栈”的意思,Overflow是英语“溢出”的意思,因此Stack Overflow的直译就是“栈溢出”。2.栈溢出是缓冲区溢出的一种,缓冲区长度一般与用户自己定义的缓冲变量的类型有关。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称...

导致C++ stack overflow 的原因都有那些?
递归函数嵌套层数过多通常是导致堆栈溢出的原因。这类错误通常很难排解,不过可以通过调整算法来实现,比如,使用堆栈类管理递归调用的内存。还有就是消除递归,用循环等方法来实现。堆栈溢出的另外一个原因是函数调用不规范,特别是可变参数传递错误。比如printf函数格式化参数和函数参数不一致,导致堆栈被破坏...

SO是Stack Overflow的缩写,它在编程中具体指什么?
SO的中文解释为“栈溢出”,指的是计算机程序在执行过程中,由于调用堆栈空间不足,导致程序无法正常执行,从而出现的错误。例如,修复缓冲区溢出漏洞、服务器编译过程中的堆栈溢出、操作导致的堆栈溢出以及递归定义可能导致的堆栈溢出等问题,都是SO概念的具体体现。Stack Overflow作为一个网站,提供免费的编程...

为什么 Stack Overflow 会如此成功?
黏住用户后进而扩展企业用户,打造招聘平台,因为工程师们在网站上留下了大量的内容,能力高下一目了然。stackoverflow的设计处处体现着geek风格,从各种产品的名字到一些惯用的操作,用户容易上手并且很快就会爱上这个网站。ehow、answers做的是大而全的问答社区,解决常规问题,但用户和内容的积累很难。像...

去某个网总弹出stack overflow和并且伴有该页上的IE运行速度减慢。如果...
意思是浏览器堆栈溢出,可能是你的Javascript里有错误的嵌套。也可能是浏览器插件引起的,建议你用安全360清理一些系统不必要的插件,比如XXX搜索条之类的。此外如果用到Flash,建议去Adobe网站下载最新版本的Flash插件:http:\/\/www.adobe.com\/cn\/products\/flashplayer\/。不过最好不要用太多的Flash,尽可能...

网页突然弹出“stack overflow at line :2”是什么情况?求解决??
顾名思义,stack overflow 就是是栈溢出了。在进行数值运算时,我们常常要和运算结果的溢出打交道。数值运算结果可能上溢(overflow),也可能是下溢(underflow)。不过栈的溢出显然只可能是上溢,即栈空间被用完了。在提起“栈”(stack)这个概念的时候,千万不要忘记了它的兄弟“堆”(heap),也要...

相似回答