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;
} 展开
需要定义一个长度为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;
} 展开
7个回答
展开全部
你这个数组申明在函数内部,属于局部变量,存放在了栈上,
看看数组占用的内存大小: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;
}
展开全部
100W *4 大概是4M的样子.
函数内定义数组,是在函数堆栈分配空间,一般函数堆栈限制了最大1M的样子.
这个值我不确定,具体得查资料.
如果是这样的话,4M的数组是不可以直接定义的。
不过创建线程的时候,可以设置堆栈大小,可以试试
直接设置函数堆栈大小没用过,不知道是否可以.
其实你可以用malloc分配一块同样大小的内存,效果跟数组一样.
函数内定义数组,是在函数堆栈分配空间,一般函数堆栈限制了最大1M的样子.
这个值我不确定,具体得查资料.
如果是这样的话,4M的数组是不可以直接定义的。
不过创建线程的时候,可以设置堆栈大小,可以试试
直接设置函数堆栈大小没用过,不知道是否可以.
其实你可以用malloc分配一块同样大小的内存,效果跟数组一样.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调编译器缓存大小,或者往硬盘读写,或者映射。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
全局变量数组不会报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询