Задать вопрос
Artur3194
@Artur3194

Как правильно выделить память для двумерного массива большого размера?

Как правильно выделить память для 3-х двумерных массивов большого размера.
В хедере объявляю эти массивы
int *arr1;
int *arr2;
int *arr3;

В функции по нажатию кнопки на форме начинаю инициализировать эти массивы и программа аварийно завершается. Без указания причины ошибки. Подозреваю что из-за проблем с выделением памяти.
int M = 2000;
int N = 500;
*arr1 = *new int[M * N];
*arr2 = *new int[M * N];
*arr3 = *new int[M * N];

В деструкторе очищаю память
delete[] arr1;
delete[] arr2;
delete[] arr3;
  • Вопрос задан
  • 138 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ваш код работает так:
new int[M * N] - Выделить память размером N*M элементов типа int, получить адрес выделенной памяти.
*new int[M * N] - Прочитать значение по порученному адресу.
*arr1 = *new int[M * N]; - Взять из переменной arr1 адрес и записать по этому адресу значение, полученное на предыдущем шаге.
И, поскольку у вас arr1 не инициализирована, то идёт попытка записи в произвольное место и, соответственно, вылет при попытке доступа к чужой памяти.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Правильно будет использовать std::vector, например так
std::vector<int> v(N*M);
Но стоит учитывать, что для большого числа данных памяти может не хватить.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Это не большой размер

2000 * 500 * sizeof(int) = 4 000 000

4 мегабайта на каждую матрицу целых чисел. Когда-то давно во времена DOS этой памяти хватало чтобы поиграть в DOOM.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 дек. 2024, в 14:50
2000 руб./за проект
26 дек. 2024, в 14:40
15000 руб./за проект
26 дек. 2024, в 14:27
100000 руб./за проект