c语言中为什么可以在主函数外声明一个盛放1000000个(int)整数的数组,而在主函数内声明时运行出错?

[复制链接]
查看11 | 回复3 | 2016-9-20 21:58:11 | 显示全部楼层 |阅读模式
#includeint main(){
int a[1000000];//局部变量
return 0;}编译运行后发现溢出错误。#includeint a[1000000];//全局变量int main(){
return 0;}编译运行后正常。在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分:1、栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的...
回复

使用道具 举报

千问 | 2016-9-20 21:58:11 | 显示全部楼层
主函数外声明大数组系统可能把它放在静态数据区,主函数内声明会当作局部变量,放在堆栈里面,而一般VC默认堆栈空间是1M,所以会报错,你需要在设置里面把堆栈空间设大一点试试...
回复

使用道具 举报

千问 | 2016-9-20 21:58:11 | 显示全部楼层
因为,主函数外,是全剧变量,运行时放在 全剧数据区。主函数内,是局部变量,运行时放在 栈区。 然而,栈区放不下 1000000个(int)整数,所以,只要进入主函数,就出错了。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行