首页 文章

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

提问于
浏览
3

我正在尝试编写简单的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 回答

  • 1
    Image x = {0}
    

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

    要么

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

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

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

  • 0

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

    Image *x = NULL;
    

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

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

    但首先你需要为你的图像分配内存 .

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

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

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

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

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

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

相关问题