读取二进制文件时出现问题

时间:2017-06-30 17:27:11

标签: c

我正在尝试使用fread()读取二进制文件,但我一直遇到分段错误。我确信以下代码是正确的:

FILE *fp = fopen("User/Admin/dataset.bin", "rb");
double *data = calloc(30 * 4, sizeof(double));
fread(data, sizeof(double), 30 * 4, fp);

有没有人在这里看到问题!我真的不明白!!

2 个答案:

答案 0 :(得分:4)

您是否检查了fopencalloc的回复?您可能遇到的问题是您尝试读取的文件无法访问(未找到或权限不足),或者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)