2d 数组中大于 10^5 的值未在范围内声明

Value greater than 10^5 in 2d array was not declared in scope

本文关键字:范围内 声明 数组 大于 2d      更新时间:2023-10-16

当我尝试时:
int global[10000][10000]; 它有效,但何时
int global[100000][100000]; 当我尝试访问它时,它给了我错误:

全局未在范围内声明。

任何答案 ?

这是我的测试代码:

#include<iostream>
#include<bits/stdc++.h>
int global[100000][100000];
using namespace std;
int main(){
    int i=0;
    while(i<=10){
        cout << global[i][i];
        i++;
    }
    return 0;
}

我尝试在g++ 8.2.0中重现错误,但它产生了一个不同的但链接器错误:

/tmp/cceGsEkP.o: In function `__static_initialization_and_destruction_0(int, int)':
temp.cxx:(.text+0x60): relocation truncated to fit: R_X86_64_32 against `.bss'
temp.cxx:(.text+0x6f): relocation truncated to fit: R_X86_64_32 against `.bss'

上面的函数负责在main之前分配静态内存。由于阵列是连续分配内存的,因此int global[10000][10000]由于大约 300MB 的内存需求,因此可能是可能的,但是

相反,您可以:

  • 尝试减少维度,这将要求您删除不会在进一步计算中使用的冗余信息。
  • 如果您不能减小维度但不会使用所有状态,则可以使用 std::map .

我的印象是你想在一个非常大的矩阵的对角线上显示前十个条目。你为什么还要这样做?

  1. 由于您只需要大约 10 个数字,因此您可以轻松创建一个一维矩阵int global[10]
  2. 您的
  3. 矩阵非常大,以至于会消耗您的整个内存,正如 Blaze 的评论中已经提到的。
  4. 为什么称该变量为global?你想实现什么?