0

假设我为结构分配了动态内存。在该结构内部是一个 char *也具有动态内存的结构。如果我free(structure),其他字段也会释放它的内存吗?

4

1 回答 1

2

不。该free()函数只是释放您通过获取的块,malloc()就其而言,它只是一堆字节。它没有任何知识可以让它做这样的事情。您必须先释放该成员:

free(ptr->str);
free(ptr);

您可能会发现为您的特定类型创建一个销毁函数来清理它分配的所有内存很方便。这样,您将逻辑放在一个地方,并且您的函数确实知道结构的详细信息:

void destroy_foo(struct foo *pfoo) {
    free(foo->str);
    free(foo);
}

然后你可以打电话destroy_foo(foo);

于 2013-09-19T00:54:17.720 回答