-1

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

4

2 回答 2

1

您是在 DOS / Windows 下执行此操作吗?如果是这样,您是否记得以二进制模式打开文件(即。"rb")?

于 2013-07-05T14:47:33.543 回答
0

a) 你真的检查了 calloc 的返回吗?b) 你检查 pix 分配成功了吗?

于 2013-07-05T16:14:11.527 回答