仅在少数情况下就会出现fread分段错误

时间:2013-07-05 14:44:48

标签: c segmentation-fault fread

我正在使用由研究人员制作的人工神经网络库,我正在实习。有一个函数读取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图像,所以这不是一个尺寸问题。谢谢你的回答。

2 个答案:

答案 0 :(得分:1)

你是在DOS / Windows下做这个吗?如果是这样,你还记得以二进制模式打开文件(即"rb")吗?

答案 1 :(得分:0)

a)你真的检查了calloc的返回吗? b)您是否检查过pix已成功分配?