Dra*_*scu 1 c malloc struct std calloc
给出以下用C编写的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int var;
int **m;
} STRUCTURE;
int main() {
STRUCTURE a;
int i, j;
a.var = 5;
a.m = malloc(a.var * sizeof(int *));
for(i = 0; i < a.var; i++) {
a.m[i] = calloc(a.var, sizeof(int));
}
for(i = 0; i < a.var; i++) {
a.m[i][i] = 1;
}
for(i = 0; i < a.var; i++) {
for(j = 0; j < a.var; j++) {
printf("%d ", a.m[i][j]);
}
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将简单输出:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
鉴于结构是在main中声明的,但是它的指针是动态分配的,它们应该如何被释放?如果他们应该.
谢谢!
你malloc编辑的任何东西都必须是freed.退出时会出现异常,因为OS通常会声明内存(取决于操作系统).尽管它在技术上不会是内存泄漏,但它仍然被认为是不好的做法.
free应该按照你用来分配的顺序完成.
for(i = 0; i < a.var; i++) {
free(a.m[i]);
free(a.m);
Run Code Online (Sandbox Code Playgroud)
原因是,在你释放指针之前你不能释放主体,因为它们不再可访问.