Итак, я создал программу, которая решает системы уравнений или инвертирует матрицы с использованием исключения Гаусса, но когда я пытаюсь освободить память с помощью 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;
}