首页 > 解决方案 > 使用结构和指针时如何释放分配的内存?

问题描述

因此,我编写了一个程序,该程序使用高斯消元法求解方程组或矩阵求逆,但是当我尝试使用 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?)

在这一点上,我不知道如何解决它,我真的很难过,因为编写算法花了我生命中的大约 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;
}

标签: cmatrixmemorymemory-management

解决方案


推荐阅读