-3

Я пытаюсь динамически выделять память для 2D-массива внутри функции в C++. Был задан вопрос, подобный этому, за исключением того, что он написан с использованием malloc и dealloc, поэтому мне было интересно, можете ли вы помочь мне преобразовать его для использования новых и удаления. Вот другой вопрос:Выделить память 2d массив в функции C++

Allocate memory 2d array in function C

Я попытался изменить его на следующий код, но я получаю сообщение об ошибке.

void assign_memory_for_board(int ROWS, int COLS, int *** board) { 
    *board = new int**[ROWS]; 
    for (int i = 0; i < ROWS; i++) { 
     (*board)[i] = new int*[COLS]; 
    } 
} 

Вот ответ, который работал с помощью таНос и dealloc:

void allocate_mem(int*** arr, int n, int m) 
{ 
    *arr = (int**)malloc(n*sizeof(int*)); 
    for(int i=0; i<n; i++) 
     (*arr)[i] = (int*)malloc(m*sizeof(int)); 
} 

Спасибо!

+1

Почему так много звезд? Просто используйте соответствующие стандартные контейнеры. –

+0

Если не указано иное, всегда предпочитайте 'std :: vector' или' std :: array' и рассмотрите возможность использования 2D-вида для 1D физического массива. –

+0

Извините, что вы подразумеваете под стандартными контейнерами? – IgnisImperatrix

ответ

-1

У вас есть дополнительные звезды. Функция должна быть

void assign_memory_for_board(int ROWS, int COLS, int *** board) { 
    *board = new int*[ROWS]; 
    for (int i = 0; i < ROWS; i++) { 
     (*board)[i] = new int[COLS]; 
    } 
} 
+0

Большое спасибо! Так что C++ позаботится о некоторых указателях? Потому что в C было больше указателей. – IgnisImperatrix

+0

Говорят [вы не должны накладывать результат 'malloc()' in C] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – MikeCAT

+0

'char * hoge = new char [10];' <- '<тип указателя на элементы массива><имя переменной> = новый <тип элементов массива> [<число элементов>];' – MikeCAT

 Смежные вопросы

  • Нет связанных вопросов^_^