【发布时间】:2022-01-10 23:06:07
【问题描述】:
我有一个在开始时分配二维矩阵的函数和一个释放它的函数,我在最后使用它。
int** CreatMat(int N){
int i,**T;
T = (int**)malloc(sizeof(int*)*N);
if(T!=NULL){
for(i=0;i<N;i++){
T[i]=(int*)malloc(sizeof(int)*N);
if(T[i]==NULL){
printf("\nCreatMat()::Allocation failed at block %d",i);
for(i=i;i>=0;i--){
free(T[i]);
T[i]=NULL;
}
free(T);
T=NULL;
return T;
}
}
}
return T;
}
//Free a dynamic matrix.
void FreeMat(int** T,int N){
int i;
for(i=0;i<N;i++){
free(T[i]);
T[i]=NULL;
}
free(T);
T = NULL;
}
不知何故,FreeMat() 崩溃了。有什么帮助吗?
完整代码here
~janky 修复代码here
【问题讨论】:
-
和之间分配和释放?
-
其他在这些矩阵中编辑整数并打印它们的函数,我想在这里保持简短,如果你愿意,我可以添加它们。
-
这段代码没问题。问题出在您没有向我们展示的代码中。大概你踩到了你不应该踩到的内存,所以通过 valgrind 运行你的代码来找到问题。
-
欢迎您!请以文本形式发布Minimal Reproducible Example,这是显示故障的最短完整代码(使用运行时输入)。最好的方法是复制/粘贴,在您检查它确实表现出所描述的行为之后。
-
啊哈,三星级程序员! 砰砰