不。该free()
函数只是释放您通过获取的块,malloc()
就其而言,它只是一堆字节。它没有任何知识可以让它做这样的事情。您必须先释放该成员:
free(ptr->str);
free(ptr);
您可能会发现为您的特定类型创建一个销毁函数来清理它分配的所有内存很方便。这样,您将逻辑放在一个地方,并且您的函数确实知道结构的详细信息:
void destroy_foo(struct foo *pfoo) {
free(foo->str);
free(foo);
}
然后你可以打电话destroy_foo(foo);