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

我要解决一个随机输入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;
}

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

看看数组占用的内存大小: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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-10
数组申明在函数内部,属于局部变量,存放在了栈上,
看看数组占用的内存大小:1000000=1000*1000然后乘以int型数据长度
1000*1000*4byte约等于4M,
而栈的默认内存空间为1M左右,所以会导致内存溢出
解决这个问题,可以将数组申明在全局存储区或堆上即可
方法一:申明为全局变量
方法二:存放在堆上
第2个回答  2013-11-22
100W *4 大概是4M的样子.

函数内定义数组,是在函数堆栈分配空间,一般函数堆栈限制了最大1M的样子.
这个值我不确定,具体得查资料.
如果是这样的话,4M的数组是不可以直接定义的。
不过创建线程的时候,可以设置堆栈大小,可以试试
直接设置函数堆栈大小没用过,不知道是否可以.
其实你可以用malloc分配一块同样大小的内存,效果跟数组一样.
第3个回答  2013-11-22
调编译器缓存大小,或者往硬盘读写,或者映射。
第4个回答  2013-11-22
全局变量数组不会报错
相似回答