Как я могу освободить выделенную память при использовании структур и указателей? - PullRequest
0 голосов
/ 03 декабря 2018

Итак, я создал программу, которая решает системы уравнений или инвертирует матрицы с использованием исключения Гаусса, но когда я пытаюсь освободить память с помощью free (), она просто не работает.Я попробовал это с free (mat.m), вы увидите, что в моем коде он завершается с ошибкой на 220-й строке, сразу же после функции free_matrix () в исходном коде, с:

Thread 1 received signal SIGABRT, Aborted.
free_matrix (mat=...) at main.c:220
220 }
#0  free_matrix (mat=...) at main.c:220
#1  0x0000000000000001 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

AtНа данный момент я понятия не имею, как я могу это исправить, и мне очень грустно, потому что написание алгоритма заняло у меня около 13 часов, и он просто не работает.

Так что любая помощь действительно ценится!

Мой код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct matrix
{
    double *m;
    int N;
}   matrix_t;

void alloc_matrix(matrix_t* mat)
{
    mat->m = malloc(mat->N * mat->N * sizeof(double));
}


void read_matrix(FILE* f, matrix_t mat)
{
    for (int i = 0; i < mat.N; i++)
    {
        for (int j = 0; j < mat.N; j++)
        {
            fscanf(f, "%lf", &mat.m[i * mat.N + j]);
        }
    }
}

void free_matrix(matrix_t mat)
{
        free(mat.m);
}



int main(int argc, char* argv[])
{
    char* a_matrix = argv[1];
    int N = atoi(argv[2]);

    FILE* f1 = fopen(a_matrix, "r");

    matrix_t matrix;
    matrix.N = N;

    alloc_matrix(&matrix);
    read_matrix(f1, matrix);
    free_matrix(matrix);

    fclose(f1);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...