gpt4 book ai didi

c - C 中的空指针作为结构数组

转载 作者:行者123 更新时间:2023-11-30 21:08:45 24 4
gpt4 key购买 nike

我试图将 void 指针用作 Struct数组保留几个struct对象一起在磁盘上。我想使用 void 指针将记录写入磁盘(认为是由记录组成的簇)。

void addRecordToDataPage(City record)
{
void* data = malloc(sizeof(City)*RECORD_COUNT);
FILE* fp;
fp=fopen("sampledata2.dat", "rb");
City pageofCity [RECORD_COUNT]; //City is my Struct.
if(!fp) //if it is first access, put the record to pageofCity[0]..
{
pageofCity[0]=record;
data=pageofCity;
writeDataPageToDisk(data); ..and call the write func.
return;
}

fread(&data, sizeof(City)*RECORD_COUNT, 1, fp);
int i=0;
while( (City *)data )
{
pageofCity[i] = ((City *)data)[i];
i++;
}
pageofCity[i]=record;


}
//and this is my writer function.
void writeDataPageToDisk(void* dataPage)
{
FILE* fp;
fp=fopen("sampledata2.dat", "a");
if(!fp)
{
fp=fopen("sampledata2.dat", "wb");
writeDataPageToDisk(dataPage);
}
fwrite(dataPage, sizeof(City)*RECORD_COUNT,1,fp);
fclose(fp);
}

pageofCity[i] = ((City *)data)[i]; 行中我出现内存错误。这是我在这个网站上的第一个问题,请原谅我的错误:)。

最佳答案

您的代码存在多个问题。

最可能导致错误的原因如下:

while( (City *)data )

data 的值永远不会改变,并且您每次在循环中都会连续向前读取一个字节。

if (!fp)
{
int recordsRead = fread(&data, sizeof(City), READ_COUNT, fp);
int i=0;
while( i < recordsRead)
{
}
}
pageOfCity[recordsRead] = record;

此外,由于您要向数组附加一个额外的元素,因此您需要为该记录声明额外的空间。

City pageofCity [RECORD_COUNT + 1]; //City is my Struct.

关于c - C 中的空指针作为结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37095367/

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