admin管理员组文章数量:1122851
爆栈
C语言_爆栈
我在中国大学MOOC上学习浙大课程:数据结构时,课程1.1中老师给出了使用递归方法输出1-N个数字的代码,在我输入值为100000时,程序没有反应,查看讨论区知道了这是爆栈。
程序代码
下面展示一些 代码
。
#include <stdio.h>
void printn(int n);
int main(){int n;scanf("%d",&n);printn(n);return 0;
}
void printn(int n){ if(n){printn(n-1);printf("%d\n",n);}return;
}
图为DEV C++环境下运行的结果。
爆栈
1.什么是栈?
栈是一种数据项按序排列的数据结构,主要功能是暂时存放数据和地址。在数据结构中,栈是一种先进后出的数据结构;在C/C++中,栈区(stack)由编译器自动分配释放,有一定的大小用于存放函数的参数名,局部变量的名等。
2.出现爆栈的原因
在递归中,存储的信息量大于系统栈的内存:本题是在实现打印任务时使用了过多的临时变量。
链接:
.html
3.个人的理解
在进行程序设计时,所定义的变量名,函数名,以及包含的数据等,在运行程序时首先被暂时存放在一个缓冲区内(栈或堆),程序顺序执行后,再顺序释放这些数据/变量名/函数名,使用递归方法时,由于初始数据太大以至于超过了栈或堆所拥有的空间而导致程序无法执行。
4.解决方法
①栈的大小是编译器自动分配释放的,因此可以通过修改编译环境中栈参数的上限值来解决。
/非常抱歉,尽管通过查询资料与网站我找到了可能的解决方法,但我无法准确表述这些方法以及为什么需要这样操作。如果感兴趣的话可以参考如下链接内所示的方法。/
链接:
②栈的空间比堆小,而堆由程序员分配释放,因此可以调用malloc函数申请空间。请参考如下链接:
.html
说明
1.以上部分内容来源于网络整理。
2.刚开始学习数据结构,为了帮助自己更好,更深刻的理解数据结构内容,我使用博客来记录自己所学所遇到的问题以及个人理解,如果有幸帮助到了有同样困惑的初学者,我将感到无比荣幸,同时我也希望大佬可以指出我的不足或者指点一二,我将不胜感激。
本文标签: 爆栈
版权声明:本文标题:爆栈 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1687572207a117137.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论