2012-04-26 2 views
2

я решала несколько простых упражнений указателя, когда я наткнулся на следующий примере:бесплатно 2d массив в с

void deallocate2D(int** array, int nrows) {  
/* deallocate each row */ 
int i; 
for(i = 0; i < nrows; i++) { 
     free(array[i]); 
} 

/* deallocate array of pointers */ 
free(array);  
} 

массив определен в основном, как межды ** array1;

Является ли это правильным способом освобождения памяти от массива 2d или должен ли передаваться массив int *** в функции? Есть ли способ проверить, что память успешно освобождена?

+1

для словаря, то, что вы здесь обрабатываете, - это не 2D-массив, а массив указателей. –

ответ

2

Да, это правильно. int*** необходим, только если вы намерены изменить значение указателя, которое вам не нужно.

Существуют инструменты, которые могут проверять распределение/освобождение памяти - Valgrind должен быть в состоянии это сделать.

+0

спасибо за ответ. У меня есть еще один вопрос. Если я хотел выделить память для 2-го массива, используя функцию void, это было бы правильно? void allocate2D (int *** Array, int rows) { * Array = malloc (rows * sizeof (int *)); \t int i; \t для (i = 0; i zSt

+0

@CpZNick Это кажется правильным, хотя вы можете также указать столбцы. – Pubby

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