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

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

    评论

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备