我在我的ansi c代码中遇到了一些问题。我想读取PPM图片(P6),然后将其写入color(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);
}
EDIT2:
X是473,Y是600
EDIT3:
我按照说明并上传图片(此次不同)和我在Dropbox上的源代码:code。尽管不同的图片仍然在某些时候冻结。这次是70岁。
答案 0 :(得分:0)
在您链接的代码中,您不是以二进制模式打开文件:"rb"
。
请参阅:what's the differences between r and rb in fopen
请注意,修复此问题可能意味着您需要调整fscanf
。