c - 正确释放结构

标签 c pointers malloc free

我正在尝试释放一个结构,但遇到了问题。我正在编程的是一种 n 叉树或虚拟文件系统。我有 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 的结构。我在这里缺少什么?

提前致谢

最佳答案

改变

FolderInfo Folders[MAX_FOLDERS] 

 FolderInfo* Folders[MAX_FOLDERS] 

Folders[ID] = *this 

 Folders[ID] = this. 

当然,您可以一开始就不使用 malloc 和 free。

关于c - 正确释放结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940304/

相关文章:

c - freeDiameter 和多线程

c - 从内部结构到相同类型的其他结构的指针数组

C - 内存分配,为什么*符号前后出现

c - C 中 malloc 的内存泄漏问题

c - 需要适用于 Windows 7 64 位的 C 编译器,以编译为 DOS 目标

C 凯撒密码函数调用未按预期运行

c - 线程返回值与预期输出不一致

c - 为什么指向 int 数组的未初始化指针可以赋给变量值?

C++ lambda 。需要如何捕获指针?

c - 将 malloc 数组分配给堆栈数组