Ansi C 从 PPM 文件冻结中读取



我正在努力解决我的ansi c代码中的一些问题。我想读取 PPM 图片 (P6),然后将其写入颜色 (int) 数组。一切都应该很好,但不幸的是并非如此。

问题是,读数在某个时候冻结 - 每次都在同一点。

这是一个用于读取的代码:

int **red,**blue,**green;
    //... Some code, allocations etc.
    static unsigned char a[3];
    for(i = 0; i < x; i++)
    {
           for(j = 0; j < y; j++)
           {
                fread(a, 1, 3, pic);
                red[i][j] = a[0];
                //green[i][j] = a[1];
                //blue[i][j] = a[2];
           }
    }

当它读取值 24 时,它变得疯狂 - 在一切正常之前。此值被指定为红色,直到循环结束为止为 24。

我不知道那里发生了什么,所以这就是为什么我向你们询问一些建议 - 这里可能有什么问题以及如何解决?

编辑

这是我的分配:

red = (int **)malloc(sizeof(int*) * x);
green = (int **)malloc(sizeof(int*) * x);
blue = (int **)malloc(sizeof(int*) * x);
for (i = 0; i < x; i++)
{
       red[i] = (int*)malloc(sizeof(int) * y);
       green[i] = (int*)malloc(sizeof(int) * y);
       blue[i] = (int*)malloc(sizeof(int) * y);
}

编辑2:

X 是 473 Y 是 600

编辑3:

我按照吩咐做了,并在 Dropbox 上用我的源代码上传了图片(这次不同):代码。尽管图片不同,但它仍然在某些时候冻结。这次是70。

在您链接到的代码中,您没有以二进制模式打开文件:"rb" .

参见 : fopen 中的 r 和 rb 有什么区别

请注意,解决此问题可能意味着您的fscanf需要调整。

最新更新