我正在尝试读取实际上是图像文件的内容,但已经转换为.txt文件,如下所示。结构“图像”已经定义。代码如下。
image read_Buffer(char* filename)//read from file in "buffer format" i.e 1 pixel at a time.
{
FILE *file;
file = fopen(filename, "r+");//input.txt is the image file
image img;
fscanf(file,"%d\t", &img.height);
fscanf(file,"%d\n", &img.breadth);//First line of "input.txt" gives the image dimensions
img.size = img.height*img.breadth;
img.value = (int*) malloc(img.size*sizeof(int));
for (int i=0; i<img.size; i++)
{
fscanf(file, "%d\n", &img.value[i]);
}
free(img.value);
fclose(file);
return img;
}
图像尺寸位于第一行,img.height和img。广度阅读成功。然而,问题是img.value [0]和img.value [1]似乎都是大整数。从img.value [2]到文件末尾,所有内容都成功读取。
参考是input.txt的前几行:
69 97
168
166
122
126
138
127
125
122
123
129
119
105
106
120
125
答案 0 :(得分:4)
问题与fscanf()
无关。
在返回img.value
之前,您不应该释放img
。
您当前的代码返回img
,其中包含dangling value
指针,取消引用会产生undefined behaviour。
P.S。确实需要确保在完成后最终释放img.value
。否则你会有memory leak。