入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C语言 递归中的段错误与栈溢出

创建时间:2018-02-01 投稿人: 浏览次数:182

C语言中,每次递归调用都会多一个栈帧——和普通的函数调用并没有什么不同。由于使用了调用栈,C语言自然支持了递归。在C语言的函数中,调用自己和调用其他函数并没有任何本质区别,都是建立新栈帧,传递参数并修改当前代码行。在函数体执行完毕后删除栈帧,处理返回值并修改当前代码行。

递归调用时新建了一个栈帧,并且跳转到了函数开头处执行,同一时刻可以有多个栈帧,但“当前代码行”只有一个。

“段”(segmentation)是指二进制文件内的区域,所有某种特定类型信息被保存在里面。

调用栈并不储存在可执行文件中,而是在运行时创建。调用栈所在的段称为堆栈段(Stack Segment)。和其他段一样,堆栈段也有自己的大小,不能被越界访问,否则就会出现段错误(Segmentation Fault)。

栈溢出:每次递归调用时都需要往调用栈里增加一个栈帧,久而久之就会越界。

建议把较大的数组放在main函数外,栈溢出不一定是递归调用太多,也可能是局部变量太大(局部变量也是放在堆栈段的)。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像