如何在main函数中初始化结构

时间:2012-11-10 17:31:50

标签: c struct initialization pgm

我正在尝试编写简单的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值时程序崩溃。

3 个答案:

答案 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));