Недостаточно репутации, чтобы комментировать, поэтому пишите как ответ.
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));
В этом случае один звонок
free(A);
достаточно. В общем, вы должны вызывать free () точно так же часто, как malloc ()