fscanf返回随机大数

时间:2013-12-28 13:25:38

标签: c scanf

我正在尝试读取实际上是图像文件的内容,但已经转换为.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

1 个答案:

答案 0 :(得分:4)

问题与fscanf()无关。

在返回img.value之前,您不应该释放img

您当前的代码返回img,其中包含dangling value指针,取消引用会产生undefined behaviour

P.S。确实需要确保在完成后最终释放img.value。否则你会有memory leak