c - 使用结构和指针时如何释放分配的内存?
问题描述
因此,我编写了一个程序,该程序使用高斯消元法求解方程组或矩阵求逆,但是当我尝试使用 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;
}
解决方案
推荐阅读
- python-3.x - 安装 IJulia 的问题
- node.js - 我想删除一个帖子,但有一些我似乎无法弄清楚的错误。如何使用 DELETE 从数据库中删除数据?
- lambda - NetLogo 匿名程序的问题
- python - 在 Datagrip 中将 Snowflake 数据库连接到 R 和 Python
- ios - Xcode 11 Swift 5 - 无法安装应用程序(无法加载 info.plist 文件)
- android - Android grpc 错误:TLS ALPN 协商失败,协议:[grpc-exp,h2]
- excel - 文件保存读取正确但抛出没有描述的错误
- r - 从 stats.nba.com 抓取数据,curl::curl_fetch_memory(url, handle = handle) 中出现错误
- ballerina - 芭蕾舞女演员:神秘的“方法太大”错误
- adaptive-cards - 适当的自适应卡片输入.ChoiceSet 模板结构