释放通过 malloc 获得的结构数组

Free-ing an array of structs obtained through malloc

所以我有这个结构:

typedef struct type {
      int a;
      char* b;
} type;

main 程序中,我制作了 2 个这些结构的数组,并使用 malloc():

type *v;
type *w;
v=malloc(50*sizeof(type));
w=malloc(50*sizeof(type));

现在,如果我想释放这些结构数组,这样做是否正确:

free(v);
free(w);

?

是的,没错。你只需要传递malloc()和family返回的指针即可。

调用 free() 时无需提及/提供已分配内存的大小。大小将自动处理(OS)。

FWIW,如果你已经为成员分配了动态内存,比如 w[i].bs,你需要先 free() 它们,因为一旦你在 w,在 w[i].b 中分配的所有内存将变得无法访问,因此您的程序将泄漏内存。

如果你没有为数据成员分配内存,这将是正确的

char* b;

个数组元素。

否则你需要先释放这个数据成员指向的内存,然后再释放原来的指针。

例如

for ( size_t i = 0; i < 50; i++ ) free( v[i].b );
free( v );

请注意,如果此数据成员是由字符串文字的地址初始化的,那么您不应释放此内存,因为字符串文字具有静态存储持续时间。