爆栈

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
    评论
爆栈 系统开发技术栈、Web前端开发技术栈、数据库技术栈、.NET技术栈! http://overflowstack.github.i o   本地化 English: https://github.com/unruledboy/WebFrontEndStack/ 中文博客: http://www.cnblogs.com/unruledboy/p/WebFrontEndStack.html Español: https://github.com/unruledboy/WebFrontEndStack/blob/master/README.es-es.md   Web前端技术栈 比较全面的浏览器、平台、类库、框架、工具等。   自行生成预览图    准备环境 您应该安装Visual Studio 2010 。 安装 nodejs. 安装 Phantomjs. 安装 Python 2.7. npm install 如果出现错误,您可以检查 [phantomjs-node] 的依赖(https://github.com/sgentle/phantomjs-node/wiki), node-gyp.   运行命令 npm start 运行服务并直接打开主html文件。 npm run build 生成预览图。   选项   -h, --help                           Display this message.   -p, --port number                    (Default: 3000) Set the port what express listening.   -ues, --update_existed_stargazers    (Default: false) Update project's stargazers including existed.   --phantomjs                          The task to generate the image.   --readme                             The task to update readme.   --updatestargazers                   The task to update the count of the stargazers.   为什么? 大家是否想过: Web前端开发究竟包含哪些技术呢? 我所掌握的技术这个子集,在Web前端技术大系这个超集里面占的比例是多少呢? 我究竟还没有掌握多少Web前端技术呢? 面试的时候会考哪些技术呢? 那么,Web前端开发是否也应该有这样的技术栈概览图呢?搜索了很久,没有找到一个符合我要求的“较为全面”地表述Web前端技术大系的图表。所以我们自行设计了这个Web前端技术栈。 这个图表里的分类未必准确,相关技术也难免会有遗漏,欢迎大家指点以便不断改进。 Web前端技术实在太繁多限于篇幅,,这里没有罗列一些技术。 您可以点击下面链接查看交互式预览图(用鼠标移动/缩放/点击节点打开相关网站): https://rawgit.com/unruledboy/WebFrontEndStack/master/ux/WebFrontEndStack.htm?locale=zh-cn   Web前端技术栈 Web前端开发技术栈 Electron [GitHub] NW.js [GitHub] PhoneGap / Cordova [GitHub] MUI [GitHub] React Native [GitHub] Ionic [GitHub] CoffeeScript [GitHub] TypeScript [GitHub] ClojureScript [GitHub] JSX (Facebook) Sandbox XSS CORS SEO Responsiveness CDN Normalize [GitHub] Reset Handlebars [GitHub] Haml [GitHub] Slim [GitHub] Jade [GitHub] Ejs Spacebars mustache [GitHub] babel [GitHub] LESS Sass(SCSS) Stylus LESS [GitHub] Hat [GitHub] Compass [GitHub] Bourbon [GitHub] Gumby [GitHub] nib [GitHub] 基础库 模块化 框架 UI框架 WebSocket 数据可视化 WebGL CSS3 动画 流程控制 函数式编程 手机 UI 框架 jQuery [GitHub] Prototype [GitHub] Zepto [GitHub] MooTool [GitHub] umd [GitHub] RequireJS [GitHub] webpack [GitHub] browserify [GitHub] ES6 Module CommonJS AMD UMD AngularJS [GitHub] Backbone [GitHub] Knockout [GitHub] Ember [GitHub] React [GitHub] polymer [GitHub] Deft.js [GitHub] Vue [GitHub] Riot [GitHub] Bootstrap [GitHub] Semantic UI [GitHub] Foundation [GitHub] Material UI [GitHub] WinJS [GitHub] Pure [GitHub] Amaze UI [GitHub] Socket.io [GitHub] web-socket-js [GitHub] D3 [GitHub] Echarts [GitHub] HighCharts [GitHub] Vis.js [GitHub] Flot [GitHub] Three.js [GitHub] Babylon.js [GitHub] Pixi.js [GitHub] Animate.css [GitHub] bounce.js [GitHub] Effeckt.css [GitHub] move.js [GitHub] Bluebird [GitHub] q [GitHub] when.js [GitHub] yield await Promise Generator ES6 ES7 async [GitHub] co [GitHub] Promise bacon.js [GitHub] immutable.js [GitHub] ramda [GitHub] underscore.js [GitHub] lodash [GitHub] ReactiveX [GitHub] jQuery Mobile [GitHub] Jo [GitHub] Dojo Mobile Lungo [GitHub] 工具 在线工具 QUnit [GitHub] Jasmine [GitHub] Mocha [GitHub] Selenium [GitHub] WebDriverIO [GitHub] Protractor Chai [GitHub] Sinon.JS [GitHub] Karma [GitHub] nodeunit [GitHub] tape [GitHub] nightmare [GitHub] Sauce Labs Browser Stack Browser Shots Browserling Browser Sandbox Cross Browser Testing Browsera SortSite npm [GitHub] Bower [GitHub] JSLint [GitHub] JSHint [GitHub] jscs [GitHub] Closure Linter Node.js [GitHub] Phantom.js [GitHub] SpiderMonkey Developer Tools Firebug [GitHub] Grunt [GitHub] Gulp [GitHub] Brunch [GitHub] Yeoman Broccoli [GitHub] 精简 编译 合并 混淆 图像优化 单元测试 Sublime Text WebStorm Atom [GitHub] Vim Emacs Brackets [GitHub] Light Table [GitHub] Visual Studio Visual Studio Code [GitHub] Dreamweaver ;-) FrontPage / SharePoint Designer ;-) Cookie Local Cache Session Storage Local Storage Components Resources Extensions Plugins Images Icons Fonts Audios Videos JScript (IE8- / ASP) Chakra (IE9 / Edge) V8 (Chrome / Opera / Nodejs / MongoDB) [GitHub] SpiderMonkey (Firefox) Nitro (Safari) Trident (IE) Blink / prev. WebKit (Chrome) Gecko (Firefox) WebKit (Safari) Blink / prev. Presto (Opera) EdgeHTML (Edge) HTML JavaScript CSS DOM Element Attribute Prototype Scope Closure JSON (JavaSript Object Notation) AJAX (Asynchronous JavaScript and XML) Selector Priority Specificity Box Model W3C HTML CSS XHTML XML HTML (HyperText Markup Language) CSS (Cascading Style Sheets) JavaScript HTTP/1.1 HTTP/2 WebSocket 链接 会话 授权 请求 响应 压缩 打包 服务器端推送 Internet Explorer Chrome Firefox Safari Opera Edge Netscape ;-) 浏览器 协议 Web三剑客 标准 核心概念 渲染引擎 脚本引擎 运行时 编辑器 编译任务 编译工具 调试 基础工具 质量控制 包管理 测试 库 / 框架 CSS 预处理器 未来标准 模板引擎 统一化 最佳实践 安全 中间语言 移动应用开发 桌面应用开发   标签:爆栈网  技术栈

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值