首页  /  编程问答  /  什么是栈溢出?  /  

什么是栈溢出?

黄老师答:栈溢出就是栈空间的内存越界溢出访问


虽然简单概括说是如此,只要是栈空间如数组等各种局部变量、形参等等的越界访问都算栈溢出问题,但栈溢出包含多个方面,除了前面讲到的数组越界,还有多次调用函数时因为多次调用导致栈空间溢出,比如超次数的递归,由于每次函数调用,都会开辟本函数需要的栈空间,包括局部变量和形式参数,由于是递归调用,每次调用后没有结束释放空间就再次调用自身,栈空间的开销也一直上升,当达到编译器的预设大小后程序就会运行崩溃结束。



另一方面,当定义长度过大的数组定义等等,超过编译器预设的占空间大小(如一些VC6默认是3M),都会导致栈溢出,比如你定义一个长度100万的整型数组,可以大概计算它所占用的内存空间,大家可以自行尝试





本文固定URL:https://www.dotcpp.com/qa/14

编程杂谈
编程基础
知识答疑