存储在数组中的自由结构

时间:2014-10-29 16:27:55

标签: c pointers struct free

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

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 *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 ***

1 个答案:

答案 0 :(得分:1)

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

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

请检查此问题:Malloc of arrays and structs within a struct