正确释放结构

时间:2014-11-14 23:05:39

标签: c pointers malloc free

我试图释放一个结构并遇到麻烦。我编程的是一种n-ary树或虚拟文件系统。我有2个不同的结构(一个用于文件夹,一个用于文件)和每个结构的数组,其中存储每个元素。结构有一个成员ID,我已经制作好了,所以我可以使用文件夹[ID]来获取文件/文件夹,它将返回带有该ID的结构。我遇到的问题是删除/释放它们。首先,如果它是一个将被删除的文件夹,它将以递归方式检查子文件和文件夹,并首先删除它们。出于某种原因,无论我尝试什么,我都无法让free()工作。

我的文件夹结构:

typedef struct {
    FolderID selfID;
    FolderID parentID;

    /* Other members are not important */
} FolderInfo;

我的阵列:

FolderInfo Folders[MAX_FOLDERS];

如何将FolderInfo结构添加到数组中(在我的new_folder函数中):

/* ... */
FolderInfo *this = malloc(sizeof (FolderInfo));
/* ... */
ID++;
Folders[ID] = *this;
/* ... */

删除功能:

int32_t delete_folder(FolderID ID) {
    if(FolderIsEmpty(ID) == 1) {
        return -1; /* Error */
    }

    /* Check for children and delete them recursively */

    /* ... */

    free(Folders[ID]);
    return 0;
}

每当我创建一个新的文件/文件夹时,它都会被添加到索引 ID 下的文件/文件夹数组中,因此文件夹[ID]应该获得具有该ID的结构。我在这里缺少什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

更改

FolderInfo Folders[MAX_FOLDERS] 

 FolderInfo* Folders[MAX_FOLDERS] 

Folders[ID] = *this 

 Folders[ID] = this. 

当然,你可以简单地避免使用malloc并免费开始。