我正在尝试使用fread()
读取二进制文件,但我一直遇到分段错误。我确信以下代码是正确的:
FILE *fp = fopen("User/Admin/dataset.bin", "rb");
double *data = calloc(30 * 4, sizeof(double));
fread(data, sizeof(double), 30 * 4, fp);
有没有人在这里看到问题!我真的不明白!!
答案 0 :(得分:4)
您是否检查了fopen
和calloc
的回复?您可能遇到的问题是您尝试读取的文件无法访问(未找到或权限不足),或者calloc
可能无法分配内存。
你需要检查返回的指针,看看它们是NULL
是这样的:
FILE *fp = fopen("User/Admin/dataset.bin", "rb");
if(fp == NULL){
perror("Failed to open file:\n");
return; // or however you want to handle this
}
double *data = calloc(30 * 4, sizeof(double));
if(data == NULL){
perror("Failed to allocate space for data pointer:\n");
fclose(fp);
return; // or however you want to handle this
}
fread(data, sizeof(double), 30 * 4, fp);
此处的问题很可能是打开User/Admin/dataset.bin
的权限不足或文件路径不正确。
答案 1 :(得分:0)
如果代码正确,并且文件可以成功打开,则文件大小可能小于30*4*sizeof(double)