在C中将空指针作为结构数组

时间:2016-05-08 01:40:13

标签: c arrays pointers struct void

我试图将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];行中我收到了内存错误。 这是我在本网站的第一个问题,请原谅我的错误:)。

1 个答案:

答案 0 :(得分:0)

您的代码存在多个问题。

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

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.