我目前正在开发虚拟文件系统。没有实际的物理文件夹或文件,它只是练习数据结构。要创建文件或文件夹我有这个结构:
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 ***
答案 0 :(得分:1)
如果folderInfo是一个裸结构(与指向结构的指针相对),则不需要释放它(它在malloc FS_Object时分配)。由于你没有使用malloc,你不需要释放它。
所以你基本上可以删除数字(2)和(3)中的步骤。