黄老师答:栈溢出就是栈空间的内存越界溢出访问
虽然简单概括说是如此,只要是栈空间如数组等各种局部变量、形参等等的越界访问都算栈溢出问题,但栈溢出包含多个方面,除了前面讲到的数组越界,还有多次调用函数时因为多次调用导致栈空间溢出,比如超次数的递归,由于每次函数调用,都会开辟本函数需要的栈空间,包括局部变量和形式参数,由于是递归调用,每次调用后没有结束释放空间就再次调用自身,栈空间的开销也一直上升,当达到编译器的预设大小后程序就会运行崩溃结束。
另一方面,当定义长度过大的数组定义等等,超过编译器预设的占空间大小(如一些VC6默认是3M),都会导致栈溢出,比如你定义一个长度100万的整型数组,可以大概计算它所占用的内存空间,大家可以自行尝试
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程