哈哈。
#include
#include
#include
#include
#include "stdafx.h"
#include
#include
#include
using namespace std;
int red[9240000];
int main()
{
int i, j;
int tmp;
srand((unsigned)time(NULL));
i = 0;
/*随机生成9240000个号码*/
while (i < 9240000)
{
tmp = (int)((1.0*rand() / RAND_MAX) * 33 + 1);
for (j = 0; j < i; j++)
if (red[j] == tmp)
break;
if (j == i)
{
red[i] = tmp;
i++;
}
}
printf("红色球:");
for (i = 0; i < 9240000; i++)
printf("%d", red[i]);
return 0;
}
如图随机生成924000个号码,内存超啦。
如何定义超大数组?
你这个数组申明在函数内部,属于局部变量,存放在了栈上,
看看数组占用的内存大小:1000000=1000*1000然后乘以int型数据长度
1000*1000*4byte约等于4M,
而栈的默认内存空间为1M左右,所以会导致内存溢出
解决这个问题,可以将数组申明在全局存储区或堆上即可
方法一:申明为全局变量
#include
#include
using namespace std;
int list[1000000];//全局变量
int main(){
int a,b;
cin>>a;
for(b=0;b cin>>list[b];
sort(list,list+a);
for(b=0;b<a;b++)
cout<<list[b]<<endl;
return 0;
}
方法二:存放在堆上
#include
#include
using namespace std;
int main(){
int a,b,*list;
//int list[1000000];
list = new int[1000000];//存放在堆上
cin>>a;
for(b=0;b cin>>list[b];
sort(list,list+a);
for(b=0;b<a;b++)
cout<<list[b]<<endl;
return 0;
}