我在Visual Studio C ++中编写C语言。
在第一次调用此函数时没有问题。它使所有进程在第二次调用VS时给出“Windows已触发断点”错误。 但是,我在Linux中编译并运行代码,没有问题。
void printDataPagePersons(int pageNumber)
{
Person* pageofCity = (Person*)malloc(sizeof(Person)* RECORD_COUNT);
printf("page of city : %d\n",sizeof(*pageofCity));
FILE* fp;
fp=fopen("x.dat", "rb");
fseek(fp, PAGE_SIZE*pageNumber,SEEK_SET);
fread(pageofCity, PAGE_SIZE,1, fp);
fclose(fp);
//OTHER PRINTING PROCESSES...
}
答案 0 :(得分:1)
在这里你分配一个缓冲区:
Person* pageofCity = (Person*)malloc(sizeof(Person)* RECORD_COUNT);
这是缓冲区的大小:
sizeof(Person)* RECORD_COUNT
然后在这行代码中将文件中的数据读入该缓冲区:
fread(pageofCity, PAGE_SIZE,1, fp);
你告诉 fread 函数将 PAGE_SIZE 字节读入该缓冲区。
我猜测你的问题的原因是这种情况也是如此:
PAGE_SIZE > sizeof(Person)* RECORD_COUNT