C++如何定义一个长度超过一百万的数组

我要解决一个随机输入100万个数字,然后把他们从小到大排序的问题需要定义一个长度为100万的数组,编译可以通过,但是一运行程序就会停止,如何解决?代码如下:#includ... 我要解决一个随机输入100万个数字,然后把他们从小到大排序的问题
需要定义一个长度为100万的数组,编译可以通过,但是一运行程序就会停止,如何解决?
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a,b;
int list[1000000];
cin>>a;
for(b=0;b<a;b++)
cin>>list[b];
sort(list,list+a);
for(b=0;b<a;b++)
cout<<list[b]<<endl;

return 0;
}
展开
 我来答
百度网友6a6aa8c
推荐于2017-09-13 · TA获得超过1483个赞
知道小有建树答主
回答量:707
采纳率:100%
帮助的人:738万
展开全部

你这个数组申明在函数内部,属于局部变量,存放在了栈上,

看看数组占用的内存大小:1000000=1000*1000然后乘以int型数据长度

1000*1000*4byte约等于4M,

而栈的默认内存空间为1M左右,所以会导致内存溢出

解决这个问题,可以将数组申明在全局存储区或堆上即可

方法一:申明为全局变量

#include<iostream>
#include<algorithm>
using namespace std;
int list[1000000];//全局变量
int main(){
int a,b;
cin>>a;
for(b=0;b<a;b++)
cin>>list[b];
sort(list,list+a);
for(b=0;b<a;b++)
cout<<list[b]<<endl;

return 0;
}

方法二:存放在堆上

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a,b,*list;
//int list[1000000];
list = new int[1000000];//存放在堆上
cin>>a;
for(b=0;b<a;b++)
cin>>list[b];
sort(list,list+a);
for(b=0;b<a;b++)
cout<<list[b]<<endl;

return 0;
}
飞尘2002
推荐于2017-10-10 · TA获得超过409个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:34.8万
展开全部
数组申明在函数内部,属于局部变量,存放在了栈上,
看看数组占用的内存大小:1000000=1000*1000然后乘以int型数据长度
1000*1000*4byte约等于4M,
而栈的默认内存空间为1M左右,所以会导致内存溢出
解决这个问题,可以将数组申明在全局存储区或堆上即可
方法一:申明为全局变量
方法二:存放在堆上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mu326668629
2013-11-22 · 超过18用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:51万
展开全部
100W *4 大概是4M的样子.

函数内定义数组,是在函数堆栈分配空间,一般函数堆栈限制了最大1M的样子.
这个值我不确定,具体得查资料.
如果是这样的话,4M的数组是不可以直接定义的。
不过创建线程的时候,可以设置堆栈大小,可以试试
直接设置函数堆栈大小没用过,不知道是否可以.
其实你可以用malloc分配一块同样大小的内存,效果跟数组一样.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1070ee9
2013-11-22 · 超过17用户采纳过TA的回答
知道答主
回答量:153
采纳率:0%
帮助的人:68.8万
展开全部
调编译器缓存大小,或者往硬盘读写,或者映射。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
半月夜曲bP
2013-11-22 · 超过10用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:27.5万
展开全部
全局变量数组不会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式