qijixingzhe 2018-12-15 02:07 采纳率: 66.7%
浏览 5911
已结题

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个号码,内存超啦。
如何定义超大数组?

  • 写回答

1条回答 默认 最新

  • 萌物酱 2018-12-15 02:45
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器