【发布时间】:2015-06-17 08:50:27
【问题描述】:
我试图解除分配我在MatrizCrea(n,m) 中使用MatrizLibera(v) 创建的矩阵,但free() 都告诉我存在类型冲突。
我已经按照多个来源完成了这段代码,所以我很不确定为什么会发生这个错误。
header.h
typedef struct Matriz {int n, m, **d;} Matriz;
Matriz MatrizCrea(int n, int m);
void MatrizLibera(Matriz v);
body.c
Matriz MatrizCrea(int n, int m) {
Matriz mat;
mat.n = n;
mat.m = m;
int ** val = (int*)malloc(n*sizeof(int*));
int i = 0;
for (; i<n;i++) {
val[i] = (int*)malloc(m*sizeof(int*));
}
mat.d = val;
return mat;
}
void MatrizLibera(Matriz v) {
int i = 0;
for (; i<v.n; i++) {
int *a = v.d[i];
free(a);
}
free(v);
}
我应该如何释放二维数组?
提前致谢。
【问题讨论】:
-
val[i] = (int*)malloc(m*sizeof(int*));看起来不对.. 建议val[i] = malloc(m*sizeof *(val[i]));(错误类型) -
你确定
free(v)?不应该是free(v.d)吗?此外,作为一种优化,这些函数应该返回一个指针并接受一个指针参数。 -
int ** val = (int**)malloc(n*sizeof(int*));,val[i] = (int*)malloc(m*sizeof(int));,free(v.d); -
@chux 感谢您的回答。不幸的是,我仍然收到相同的“免费冲突类型()”错误。
-
@user3121023 确实如此,但我在调用它时将它存储在另一个矩阵中,.n 和 .m,直接传递给新矩阵,唯一需要作为指针的是.d,我相信。 (我做
matriz name = MatrizCrea(4,5);)
标签: c arrays types free dealloc