c - free() 在动态分配的内存中的作用域是什么?

标签 c malloc free dynamic-memory-allocation dynamic-allocation

假设我有以下代码:

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/

相关文章:

c - OpenMP 性能不佳

C Keil 编译器使用 malloc 作为局部变量,为什么?

关于 free() 的 C 题

c++ - 类 Hook - Mobile Substrate 返回值

python - 将 C 代码转换为 Python 时语法无效

java - windows下socket读取超时: strange hardcode in native method

c - 函数中使用的 malloc 范围

c - 二维数组作为连续的内存块

c - 为什么这个程序不创建核心转储?

c - 如何释放c中指针的内存