我正在使用由研究人员制作的人工神经网络库,我正在实习。有一个函数读取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图像,所以这不是一个尺寸问题。谢谢你的回答。
答案 0 :(得分:1)
你是在DOS / Windows下做这个吗?如果是这样,你还记得以二进制模式打开文件(即"rb"
)吗?
答案 1 :(得分:0)
a)你真的检查了calloc的返回吗? b)您是否检查过pix已成功分配?