gpt4 book ai didi

c - 存储在数组中的自由结构

转载 作者:行者123 更新时间:2023-11-30 15:28:22 25 4
gpt4 key购买 nike

我目前正在开发虚拟文件系统。没有实际的物理文件夹或文件,只是练习数据结构。要创建文件或文件夹,我有以下结构:

struct FS_Object {
int32_t id;
struct FS_Object* parent;
dataType dataType;
FolderInfo folderInfo;
FileInfo fileInfo;
};

FolderInfo 和 FileInfo 是包含 ID、名称和一些其他属性的结构。
我将每个创建的结构存储在全局数组中以访问属性:

FS_Object* dataList;

因此,如果我想释放以前创建的 FS_Object(假设存储在 dataList[1] 中):

FS_Objects 是这样创建的:

FS_Object fsObject = malloc(sizeof(struct FS_Object));


1.检查元素是否存在

if (dataList[1] != NULL) ...


2.从FS_Object结构中释放FolderInfo结构,如下所示:

FolderInfo *folderInfo = &dataList[1]->folderInfo;
free(folderInfo);
folderInfo = NULL;


3.免费文件信息:

fileInfo *fileInfo = &dataList[1]->fileInfo;
free(fileInfo);
fileInfo = NULL;


4. 最后释放 FS_Object 结构本身:

free(dataList[1]);
dataList[1] = NULL;


这是正确的方法吗?当我尝试释放FolderInfo结构时,当前出现以下异常:

*** Error in `./filesystem': free(): invalid pointer: 0x0000000001fa70e8 ***

最佳答案

如果folderInfo是一个裸结构(与指向结构的指针相反),则不需要释放它(它是在malloc FS_Object时分配的)。由于您没有分配它,因此不需要释放它。

所以你基本上可以删除第(2)和(3)中的步骤。

检查这个问题:Malloc of arrays and structs within a struct

关于c - 存储在数组中的自由结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26635743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com