在C+中使用fread()、fwrite()和malloc+; 我在C++中使用Frad和Fuffic函数有惊人的困难。
该项目正在编写一个基本的FAT16文件系统,我们仅限于使用fread和fwrite 最初编写文件时,我的代码如下所示:在C+中使用fread()、fwrite()和malloc+; 我在C++中使用Frad和Fuffic函数有惊人的困难。,c++,filesystems,malloc,fwrite,fread,C++,Filesystems,Malloc,Fwrite,Fread,该项目正在编写一个基本的FAT16文件系统,我们仅限于使用fread和fwrite 最初编写文件时,我的代码如下所示: directoryTable = (directoryEntry *)malloc(clusterSize); for (int i = 0; i < bootRecord[0] / 128 ; ++i){ directoryEntry * newEntry = (directoryEntry *)malloc(sizeof(d
directoryTable = (directoryEntry *)malloc(clusterSize);
for (int i = 0; i < bootRecord[0] / 128 ; ++i){
directoryEntry * newEntry = (directoryEntry *)malloc(sizeof(directoryEntry));
newEntry->name = (char *)malloc(112);
newEntry->name[0] = 'a'
write(1, &(newEntry->name[1]), 1);
newEntry->size = 0;
newEntry->type = 0;
newEntry->creation = 0x0000;
newEntry->index = 0;
fwrite(newEntry->name, 112, 1, fp);
fwrite(&newEntry->size, sizeof(int), 1, fp);
fwrite(&newEntry->type, sizeof(int), 1, fp);
fwrite(&newEntry->creation, sizeof(int), 1, fp);
fwrite(&newEntry->index, sizeof(int), 1, fp);
directoryTable[i] = *newEntry;
}
fseek(fp, clusterSize * root, SEEK_SET);
for(int i = 0; i < clusterSize / 128; ++i){
directoryEntry * newEntry = (directoryEntry *) malloc(128);
newEntry->name = (char *) malloc(112);
fread(newEntry->name, 112, 1, fp);
write(1, newEntry->name[0],1);
fread(&newEntry->size, sizeof(int), 1, fp);
fread(&newEntry->type, sizeof(int), 1, fp);
fread(&newEntry->creation, sizeof(int), 1, fp);
fread(&newEntry->index, sizeof(int), 1, fp);
directoryTable[i] = *newEntry;
}
谢谢你们抽出时间,如果你们需要我澄清任何事情,我很乐意。我看到很多小问题:
我不确定这些因素是否导致了您所看到的问题,您实际上并没有具体说明,但它至少可以让您指出正确的方向。可能与您的问题无关,但仍然很重要:执行
directoryEntry*newEntry=(directoryEntry*)malloc(…);
然后执行directoryTable[i]=*NeWEnter;会导致内存泄漏。文件是C++,我使用C++编译器,但我受限制(由我的教授)也就是说,我如何避免内存泄漏?我假设删除NeXEnter会导致DealTyToEnter对象消失。谢谢你的回复。为什么MalC++这个名字?你可以在栈上做一个112字符数组,只是指向那个。谢谢你的回答。我为我的问题中的歧义表示歉意。n、 1.)我不知道memset函数,我会尝试一下。2.)这是因为在我的结构定义中,name是char*但没有其他东西是指针,所以我需要引用它们的内存地址。3.)这也是我没有注意到的事情,但你是对的,这没有意义。4.)我忘了包括我的另一个fseek调用,但我同意t很难理解…但我不确定是否有其他方法可以做到。5.)128应该是目录项的大小。112代表名称,然后是4代表每个无符号整数。6.)我早在编码读取循环之前就对写入循环进行了编码,这可能解释了其中的模糊性。sizeof(directoryEntry)是错误的,所以我将改变这一点。我将尝试玩其中一些东西。再次感谢您的回答。您帮了我很大的忙。sizeof(directoryEntry)是正确的,因为您正在为该结构分配内存。您正在单独分配的名称的112字节。我希望我的答案可以帮助您解决最终问题。
typedef struct{
char * name;
unsigned int index;
unsigned int size;
unsigned int type;
unsigned int creation;
} directoryEntry;