爆栈

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.出现爆栈的原因
在递归中,存储的信息量大于系统栈的内存:本题是在实现打印任务时使用了过多的临时变量。
链接:
https://www.cnblogs.com/Miracevin/p/9828971.html

3.个人的理解
在进行程序设计时,所定义的变量名,函数名,以及包含的数据等,在运行程序时首先被暂时存放在一个缓冲区内(栈或堆),程序顺序执行后,再顺序释放这些数据/变量名/函数名,使用递归方法时,由于初始数据太大以至于超过了栈或堆所拥有的空间而导致程序无法执行。

4.解决方法
①栈的大小是编译器自动分配释放的,因此可以通过修改编译环境中栈参数的上限值来解决。
/非常抱歉,尽管通过查询资料与网站我找到了可能的解决方法,但我无法准确表述这些方法以及为什么需要这样操作。如果感兴趣的话可以参考如下链接内所示的方法。/
链接:https://stackoverflow.com/questions/31967592/increase-stack-size-in-dev-c-permanently

②栈的空间比堆小,而堆由程序员分配释放,因此可以调用malloc函数申请空间。请参考如下链接:
https://www.cnblogs.com/ybqjymy/p/12365716.html

说明

1.以上部分内容来源于网络整理。
2.刚开始学习数据结构,为了帮助自己更好,更深刻的理解数据结构内容,我使用博客来记录自己所学所遇到的问题以及个人理解,如果有幸帮助到了有同样困惑的初学者,我将感到无比荣幸,同时我也希望大佬可以指出我的不足或者指点一二,我将不胜感激。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值