Основываясь на коде, вы пытаетесь освободить матрицу (массив массивов) при передаче массива в качестве параметра функции. Попробуйте следующее:
void freeMatrix(int N, double ** A)
{
for(int i = 0; i < N; i++)
free(A[i]);
free(* A);
}
Недостаточно репутации, чтобы комментировать, поэтому пишу как ответ.
[i] имеет тип double. free () ожидает указатель. Возможно, вы хотели объявить функцию как
void freeMatrix(int N, double **A){
for(int i = 0; i < N; i++)
free(A[i]);
free(A);
}
Вопрос был уточнен: матрица изначально была создана как
double *A = (double *)malloc(N * N * sizeof(double));
В этом случае один вызов
[112 ]достаточно. В общем, вы должны вызывать free () точно так же часто, как malloc ()