Я не совсем уверен, что вы пытаетесь сделать здесь, но имейте в виду, что утверждение
arr = destMatrix;
в func
устанавливает только локальную копию вашего указателя на destMatrix
. Вернувшись в main
(и глобально), 2dArr
(или как вы его на самом деле называли, поскольку, как заметил @nm, это неверный идентификатор), все еще имеет свое первоначальное значение malloc
ed, даже если вы успешно освободили все указатели в func
. Если вы попытаетесь использовать или освободить этот указатель (или старые указатели, на которые он все еще [вероятно] указывает)) в другом месте, вы можете получить различные ошибки. (В этом случае, будьте рады, что вы получаете ошибки - вместо этого вы могли бы молча уничтожать память, от которой зависит какой-то другой процесс.) Если вы намереваетесь изменить 2dArr
в func
, вам нужно объявить
void func(int ***arr);
и позвоните по номеру
func(&2dArr);
, чтобы вы могли обращаться к исходным значениям и изменять их с помощью разыменования, например,
free((*arr)[i]);