Передача аргументов в функцию в цикле C

Дело вот в чем. Есть функция, которая должна считать обратную матрицу с помощью LUP-разложения. Передаю параметр в цикле, а тот возвращает не то, что должен, и я не могу понять, почему. Самое интересное, что при передаче тех значений в цикле и без, ответы разные (те, что я передал не в цикле - правильные).

     void invert(double **L, double **U, int *p, int N, double**IA) {

    double *b = (double*)malloc(sizeof(double) * N);
    for (int i = 0; i < N; ++i) {

        for (int j = 0; j < N; ++j) {
            if (j == i) {
                b[j] = 1;
            } else {
                b[j] = 0;
            }
        }
//ВОТ ЭТОТ УЧАСТОК
        showVect(b, N);
        IA[i] = solve(L, U, b, p, N);
        free(b);
    }

    showMatr(IA, N);}

    double *solve(double **L, double **U, double *b, int *p, int N) {

    double *x = (double*)malloc(sizeof(double) * N);
    double *y = (double*)malloc(sizeof(double) * N);
    double *temp = (double*)malloc(sizeof(double) * N);

    for (int i = 0; i < N; ++i) {
        temp[i] = b[p[i]];
    }
    b = temp;
    free(temp);


    for (int i = 0; i < N; ++i) {
        double sum = 0;
        for (int j = 0; j < i; ++j) {
            sum += L[i][j]*y[j];

        }
        y[i] = b[i] - sum;
    }

    for (int i = N-1; i > -1; --i) {
        double sum = 0;
        for (int j = i; j < N; ++j) {
            sum += U[i][j]*x[j];
        }
        x[i] = (y[i] - sum)/U[i][i];
    }

    free(y);
    return x;
}

Ответы (1 шт):

Автор решения: Artem Belov

Не нужно освобождать память от y и temp в функции решения уравнения

→ Ссылка