Значение больше 10 ^ 5 в 2d массиве не было объявлено в области видимости - PullRequest
0 голосов
/ 11 января 2019

когда я пытался 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;
}

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Я попытался воспроизвести ошибку в 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'

Выше функция отвечает за распределение статической памяти перед основной. Поскольку массиву выделяется память непрерывно, int global[10000][10000] может быть возможным из-за потребности в памяти около 300 МБ, но

Вместо этого вы можете:

  • Попробуйте уменьшить размерность, которая потребует от вас удаления избыточной информации, которая не будет использоваться в дальнейших вычислениях.
  • Если вы не можете уменьшить размер, но не будете использовать все состояния, тогда вы можете использовать что-то вроде std::map.
0 голосов
/ 11 января 2019

У меня сложилось впечатление, что вы хотите показать десять первых записей по диагонали очень большой матрицы. Почему ты вообще хочешь это сделать?

  1. Поскольку вам нужно всего около 10 чисел, вы можете легко создать одномерную матрицу int global[10].
  2. Ваша матрица настолько велика, что потребляет всю вашу память, как уже упоминалось в комментарии Blaze.
  3. Почему вы называете эту переменную global? Чего ты пытаешься достичь?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...