我试图释放一个结构并遇到麻烦。我编程的是一种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的结构。我在这里缺少什么?
提前致谢
答案 0 :(得分:1)
更改
FolderInfo Folders[MAX_FOLDERS]
到
FolderInfo* Folders[MAX_FOLDERS]
和
Folders[ID] = *this
到
Folders[ID] = this.
当然,你可以简单地避免使用malloc并免费开始。