Почему это показывает мне ошибку, когда я пытаюсь освободить матрицу? - PullRequest
0 голосов
/ 08 апреля 2019

Когда я пытаюсь скомпилировать свой код, я получаю эту ошибку, и я не знаю почему:

ошибка: несовместимый тип для аргумента 1 "free" бесплатно (А [I]);

void freeMatrix(int N, double *A)
{
for(int i = 0; i < N; i++)
        free(A[i]);
free(A);
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Недостаточно репутации, чтобы комментировать, поэтому пишите как ответ.

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 ()

0 голосов
/ 08 апреля 2019

Основываясь на коде, вы пытаетесь освободить матрицу (массив массивов) при передаче массива в качестве параметра функции.Попробуйте следующее:

void freeMatrix(int N, double ** A)
{
    for(int i = 0; i < N; i++)
        free(A[i]);
    free(* A);
}
...