【发布时间】:2017-11-16 00:47:18
【问题描述】:
我知道在函数中声明的变量有automatic storage。这是否意味着不需要使用malloc 在函数调用中显式分配的free 指针(下面的p)?
void f() {
int *p;
p = malloc(sizeof(int));
*p = 1;
printf("%p %d\n", p, *p); // 0x7fc135c02850 1
free(p); // is this necessary?
}
int main() {
f();
}
(请注意,我在这里使用了指向 int 的指针,但该问题适用于任何返回值为 malloc 和朋友的指针。)
我猜不是,因为malloc 在堆而不是堆栈上分配内存;因此,当f() 的堆栈帧被弹出时,p 指向的内存不会被自动释放。
【问题讨论】:
-
您正在释放变量包含的指针指向的内存,而不是变量。
-
谢谢,编辑了问题;如果您有更好的建议,请告诉我。
标签: c pointers memory-management