第一节 c++中 定义数组变量放在int main 内外的区别?

博客讲述了在实现桶排序时遇到的程序错误,问题出在数组定义的位置。作者发现将数组定义移出主函数可以解决问题,因为这样数组会被分配在数据区,避免了栈区内存限制导致的大数组溢出。文章解释了栈区与数据区的区别,并强调了内存管理在程序设计中的重要性。
摘要由CSDN通过智能技术生成

这里写自定义目录标题

(一)遇到的问题

在“桶排序”中遇到了这样的一个程序:

具体代码如下:

#include<iostream>
using namespace std;
int main(){
	int n,number,num[1001];
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>number;
		num[number]++;
	}
	for(int k=0;k<1001;++k){
		for(int j=1;j<num[k];++j) cout<<k<<endl;
	}
	return 0;
}

小编吭哧吭哧搞了半天一运行错了。
如下图所示:
报错图片
这什么玩意,怎么搞的这样,,这不是我想要的啊,,啥情况,,内心一万句,卧槽,,,,,,

(二)解决办法

这个问题,其实是有关数组的定义,在网上找到了大佬给的解决办法
只需要在这里插入图片描述
没错,你没看到,这个图有点抽象,但是就是把 数组定义的内容放到 主函数之前,至于为什么?
因为
定义在主函数外面,在系统运行时会将数组初始化为0,但定义在主函数内就不一定了
这只是其一 ,

其二还有,
请看下面:
ps:是抄的!!!

原因在于开设数组的区域不同,在运行代码的时候,操作系统会分配不同的内存区域来运行代码

栈区:由操作系统自动分配释放,存放函数的参数值,局部变量的值,不需要时系统会自动清除,内存较小
堆区:由new分配的内存块,也就是说在代码中new一个数组,内存由堆区分配;堆区不由编译器管,由应用程序控制,相当于程序员控制。如果程序员没有释放掉,程序结束后,操作系统会自动回收
数据区:也称全局区或者静态区,存放全局的东西,比如全局变量,内存较大
代码区:存放执行代码的地方

简而言之,在main函数外面开设一个数组,它的内存分配在数据区里;而如果在main函数内部开设一个数组,它的内存分配在栈区内。一般来说栈区的内存是比较小的,所以平常开一些小一点的数组是完全没问题的;但如果题目要求的数组比较大,那就会出现爆满溢出的情况,程序将无法访问内存而出错;相反,数据区的内存较大,就不会出现这样的问题。这就是为什么开设大数组一定要放在main函数之外的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!科技小白!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值