Я пытался использовать указатель void как массив Struct
, чтобы сохранить несколько объектов struct
на диске. Я хочу записать записи на диск с помощью указателя void (подумайте, что кластер состоит из записей) ,Void pointer as struct array в C
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];
У меня ошибка памяти. Это мой первый вопрос на этом сайте, пожалуйста, прости меня за мои ошибки :).
Вы должны были сначала прочитать [спросить]. И предоставить [mcve]. Не совсем понятно, что вы на самом деле хотите. Указатели не должны храниться в файле, так как они ** очень ** вероятно недействительны при следующем запуске. – Olaf
И формат и отступ. Он не читается. – Olaf
С этим кодом возникают стилистические и другие проблемы, но при быстром взгляде ваша проблема выглядит так: 'while ((City *) data)'. 'data' никогда не изменяется, поэтому это кажется бесконечным циклом. –