C 释放下属?

C 释放下属?,c,malloc,free,C,Malloc,Free,我必须释放结构/复合数据类型的每个组件,还是只释放结构?任何需要释放的malloc都必须释放。对于程序中的每个malloc,必须有一个空闲的。这是规则,简单明了 既然你有两次malloc,那就有两次free。并按正确的顺序操作。最后一个内存malloced应该是第一个释放的内存。@ZanLynx:这不太重要。对象可以比其他对象寿命长。嵌套时不能。如果容器对象首先是自由的,那么使用其指针获取内部指针是无效的。@ZanLynx:是的,但这不是关于malloc和free的一般规则。您可以很容易地将包含

我必须释放结构/复合数据类型的每个组件,还是只释放结构?

任何需要释放的malloc都必须释放。对于程序中的每个malloc,必须有一个空闲的。这是规则,简单明了


既然你有两次malloc,那就有两次free。

并按正确的顺序操作。最后一个内存malloced应该是第一个释放的内存。@ZanLynx:这不太重要。对象可以比其他对象寿命长。嵌套时不能。如果容器对象首先是自由的,那么使用其指针获取内部指针是无效的。@ZanLynx:是的,但这不是关于malloc和free的一般规则。您可以很容易地将包含对象的指针复制到某个位置,并在以后使用它来释放它。在这种情况下,这一点很重要……如果您首先释放结构,则内部的指针将不再有效,无法释放。请在将所有警告级别设置为“最大”的情况下进行编译。这应该告诉你将int赋值给int*是无效的。@ZanLynx:看起来可能只是一个输入错误……你可能喜欢talloc。看见
typedef struct A
{
    int* whatever;  
} A;


int main(void)
{
    A* foo = (A)malloc(sizeof(A));
    foo->whatever = (int)malloc(sizeof(int));
    free(A); // leak? (foo->whatever)
    return 0;
}