首页 > 解决方案 > 破坏结构(释放内存)

问题描述

每当您为用户定义的结构编写析构函数时,您是尝试深入到结构中并尽可能地释放,还是只是释放结构本身并期望调用者小心内存​​泄漏。

我可以想到这两种方法的优缺点。是否有标准的社区接受的编写析构函数的方式?

玩具示例

struct node {
    int *ptr;
    int num;
}
void node_free(struct node *n) {
    /* Would you include this? */
    if (n->ptr != NULL) free(n->ptr);
    free(n);
}

提出问题的情景

在图形算法中,我希望能够一次将顶点结构插入到多个列表中。我创建了一个指向顶点的包装器结构,然后我可以将这些包装器结构插入到列表中。当我构造包装器时,我传递一个指向顶点结构的指针。当我破坏包装器时,我也不能破坏顶点结构。所以这就是让我问这个问题的场景:是否有一种标准的方法来编写析构函数,让程序员不必担心这些细节?

标签: cfree

解决方案


为自定义结构提供自定义析构函数的主要兴趣正是在于:确保结构的每个分配部分同时被释放。struct 用户应该分配它并开始使用它,然后在它不再有任何用处时将其销毁。

如此简短的回答:是的


推荐阅读