例如:
char** fn() {
char *x = (char *) malloc(10 * sizeof(char));
char **y = (char **) malloc(2 * sizeof(char *));
gets(x);
y[0] = x;
y[1] = &x[5];
return y;
}
int main() {
char **p = fn();
printf("%s, %s\n", p[0], p[1]);
free(p);
return 0;
}
现在,我用free(p)
释放了分配给y的内存。但这并没有释放分配给x
的内存。我无法在fn()
中释放它,因为y[0]
和y[1]
仍指向它并将被使用。
那我该如何释放分配给x
的内存?
答案 0 :(得分:1)
您已将内存分配给x
,然后将其分配给数组元素
char *x = (char *) malloc(10 * sizeof(char));
//...
y[0] = x;
因此您可以以相同的方式但以相反的顺序释放内存
free(p[0]);
free(p);
free
的重要信息是malloc
等返回的实际地址,无论存储在何处。分配多少内存的记录由系统内部存储。您知道多少,因为分配的是您。