Как выделить память для статического n-мерного массива в c ++

0

Каков наилучший способ выделения памяти для n-мерного массива в c++ во время выполнения? Я пытаюсь прочитать матрицу значений из файла, и в зависимости от того, какой файл я читаю, матрица может быть любого размера. Однако, как только матрица будет создана, ее размер будет статическим.

Поскольку во время компиляции я не знаю, какой размер будет, я не могу определить его как int[a][b], поэтому я экспериментировал с использованием указателей на указатели типа int**, но когда я объявляю int** arr; arr[0][0] = 1 int** arr; arr[0][0] = 1 Я получаю сообщение об ошибке. Я также экспериментировал с другими решениями. Например, я попытался использовать один из ответов для определения размера массива в инициализаторе конструктора, используя int* arr; arr = new int[a] int* arr; arr = new int[a], но он не работает, как только я попытаюсь использовать его для двух измерений. Конечно, я мог бы использовать его неправильно, но следующий блок кода дает мне segfault:

int** arr;
(*arr) = new int[a];

edit: И, конечно же, сразу после того, как я задаю этот вопрос, я нахожу что-то полуподходящее в разделе "Нужна помощь в распределении динамической памяти для двухмерных массивов в c++. Я бы предпочел не делать этого таким образом, но это определенно выполнимо.

  • 2
    Вы также можете просто разместить его в одном массиве и получить к нему доступ с помощью индексов. как index = x * width + y .
Теги:
arrays

1 ответ

0
Лучший ответ

Вы сделали бы что-то подобное (украденное из этого ответа):

int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
    ary[i] = new int[sizeY];

Кроме того, вы можете сделать это:

int *ary = new int[sizeX*sizeY];

// ary[i][j] is then rewritten as
ary[i*sizeY+j]

Это может устранить головную боль указателя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню