我正在使用由我正在实习的研究人员制作的人工神经网络库。有一个函数读取 pgm 图像并将它们加载到数组中。该功能起初工作得很好。这是其中有趣的部分:
unsigned char *tmp=(unsigned char *)calloc(width, sizeof(unsigned char));
for(int i=0;i<height;i++)
{
int r=(int)fread(tmp, sizeof(unsigned char), width, fp);
if(r!=width)
{
fprintf(stderr, "Error while reading PGM file [%s] (%d bytes read instead of %d)\n", filename, r, width);
Del2D(height, pix);
pix=NULL;
free(tmp);
fclose(fp);
return(0);
}
for(int j=0;j<width;j++)
pix[i][j]=(unsigned char)tmp[j];
}
name=strdup(filename);
fclose(fp);
free(tmp);
我确实在线路上遇到了分段错误
int r=(int)fread(tmp,sizeof(unsigned char), width, fp);
但是,我只收到一个 pgm 图像的这个错误。我看到的唯一原因是因为它在高度和宽度(900x900)方面是最大的。我看过一些关于的用法,fread
在我看来这部分代码很好。我也没有看到该函数一次读取的字符数有任何限制。
任何想法?
编辑:此特定图像的宽度参数等于-1,但没有理由这样做,因为读取宽度对于其他所有图像都很好。我猜是图像本身有问题。该程序适用于我后来发现的 1024*1024 pgm 图像,所以这不是尺寸问题。感谢您的回答。