бесплатный 2D массива в C


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

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);     
}

Массив определяется в main как int * * array1;

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

1 2

1 ответ:

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

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