c++ 如何定义超大数组。

哈哈。

#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;
}