3

我正在尝试编写简单的 pgm 文件来读取 C 程序。我必须创建简单的结构:

typedef struct pgmImage {
   int R; //rows
   int C; //collumns
   int G; //grey scale
   int **pix;  // array of pixels
}Image;

现在我必须初始化空图像结构。我需要一个基于 *.pgm 文件在其他函数中设置所有变量。我一直在“无法读取内存”和“使用的未初始化局部变量 x”。我试图简单地做:

图像*x=0;

但是当读取函数尝试设置 R、C、G 值时程序崩溃。

4

3 回答 3

1
Image x = {0}

它是图像元素的静态内存分配x

或者

Image *x = calloc(1,(sizeof(Image));

它是图像的动态内存分配,x是指向已分配内存的指针

calloc分配emory并将所有内存初始化为0,因此结构中的指针将系统地初始化为NULL

于 2012-11-10T17:34:37.700 回答
1

如果你想要一个指向 Image 的指针,你必须像这样初始化。

Image *x = NULL;

像这样访问图像 (x) 阵营:

x-> C = 0;
x-> ...
x->pix = NULL;

但首先您需要为图像分配内存。

x = (Image*) malloc(sizeof(Image));
于 2012-11-10T17:37:48.203 回答
0

如果要使用指针,则必须分配足够的内存来保存结构。但是,您正在尝试取消引用空指针:这会导致未定义的行为。

#include <stdlib.h>
Image *x = malloc(sizeof *x);

然后你可以初始化成员。注意:calloc在这里使用是不可移植的,因为不能保证空指针具有全位为零的内存表示。

无论如何,这里似乎不需要使用指针。

#include <stddef.h>
Image x = { 0, 0, 0, NULL };
于 2012-11-10T17:34:20.537 回答