我正在尝试编写简单的pgm文件读取C程序。我不得不创建简单的结构:
typedef struct pgmImage {
int R; //rows
int C; //collumns
int G; //grey scale
int **pix; // array of pixels
}Image;
现在我必须初始化空的Image结构。我需要一个在其他函数中基于* .pgm文件设置所有变量。 我一直在“无法读取内存”和“使用的单位化局部变量x”。我试图简单地做:
图片* x = 0;
但是当读取函数尝试设置R,C,G值时程序崩溃。
答案 0 :(得分:1)
Image x = {0}
它是图像元素x
或
Image *x = calloc(1,(sizeof(Image));
它是图像的动态内存分配,x
是指向已分配内存的指针
calloc
将分配emory并将所有内存启动为0,因此结构中的指针将系统地启动为NULL
答案 1 :(得分:0)
如果要使用指针,则必须分配足够的内存来容纳结构。但是,您尝试取消引用空指针:这会导致未定义的行为。
#include <stdlib.h>
Image *x = malloc(sizeof *x);
然后你可以初始化成员。注意:这里使用calloc
是不可移植的,因为无法保证空指针具有全位为零的内存表示。
无论如何,你似乎不需要在这里使用指针。
#include <stddef.h>
Image x = { 0, 0, 0, NULL };
答案 2 :(得分:0)
如果你想要一个指向Image的指针,你必须像这样初始化。
Image *x = NULL;
像这样访问图像(x)阵营:
x-> C = 0;
x-> ...
x->pix = NULL;
但首先你需要为你的图像分配内存。
x = (Image*) malloc(sizeof(Image));