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


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



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




点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)