似乎有大约10个问题,并且(大多数)成功解决了由于C语言中fread()使用不当而导致的分段错误的答案。话虽如此,我遇到了这样的问题,但没有找到解决方案。
我有一个二进制文件,其中包含一个int(称为nbins)和一个floats(大小为nbins)数组。当我尝试读取此文件时,它成功打开并指向文件句柄,但在读取nbins时却 出现了分段错误错误int。这是一个最小的示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BPATH "/path/to/file"
int main(int agrc, char **argv)
{
FILE *fd;
int num;
char fname[500]={};
int nbins;
float *coords;
num = 5;
sprintf(fname,"%s/file%d.dat", BPATH, num);
if(!(fd=fopen(fname,"rb")))
{
printf("Can't open file: %s\n\n",fname);
exit(0);
}
printf("Reading input file:\n");
printf("%p: %s\n", fd, fname); // prints successfully
fread(&nbins, sizeof(int), 1, fd);
printf("nbins = %d", nbins); // seg faults before this print
/* EDIT: the above print isn't properly flushed without an \n
* The seg fault was not caused by the fread(), but the lack of
* the above print lead to the confusion */
coords = malloc(nbins * sizeof(float));
fread(coords, sizeof(float), nbins, fd);
fclose(fd);
free(coords);
return(0);
}
该文件是使用以下格式创建的:
int nbins[1];
nbins[0] = 5; // this 5 is just an example...
fwrite(nbins, sizeof(int), 1, file_ptr);
fwrite(coords, sizeof(float), nbins[0], file_ptr);
我也尝试过使用:
int *nbins = malloc(sizeof(int));
fread(nbins, sizeof(int), 1, fd);
但这并不能解决问题。该文件确实存在并且可读;我可以使用Python和NumPy一起阅读fromfile()。我是否缺少明显的东西?谢谢!
繁花不似锦
猛跑小猪
相关分类