【问题标题】:How to initialize structure in main function如何在主函数中初始化结构
【发布时间】:2012-11-10 17:31:50
【问题描述】:

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

【问题讨论】:

    标签: c struct initialization pgm


    【解决方案1】:

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

    Image *x = NULL;
    

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

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

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

    x = (Image*) malloc(sizeof(Image));
    

    【讨论】:

      【解决方案2】:
      Image x = {0}
      

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

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

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

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

      【讨论】:

      【解决方案3】:

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

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

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

      反正这里好像不用指针了。

      #include <stddef.h>
      Image x = { 0, 0, 0, NULL };
      

      【讨论】:

      • 如果你做 Image * x = malloc(sizeof x);您将收到以下错误:从 'void' 到 'Image*' 的无效转换
      • 阅读我的回答。这是Image *x
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多