假设我有以下代码:
typedef struct {
int numBars;
BarType *bars;
} fooType;
foo = (fooType *) malloc(sizeof(fooType));
foo->bars = (BarType *) malloc(sizeof(barType));
调用 free(foo) 是否也会释放这些条或者我是否需要这样做:
free(foo->bars);
free(foo);
直觉上,我觉得调用 free(foo) 就足够了——如果我不需要调用 free(foo->numBars),我就不需要调用 free(foo->bars)。但是我不必为 numBars 手动分配内存,而我为 bars 分配内存。
最佳答案
对于每个 malloc
,您都需要一个 free
。没有什么是“自动”为您完成的。
请注意,与您的说法相反,您实际上不必为bars
分配任何内存,就像您不必为分配内存一样>numBars
。但是,您正在为*bars
分配内存。
一颗星星可以在 C 中产生很大的不同......
关于c - free() 在动态分配的内存中的作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595467/