簡體   English   中英

如何在main函數中初始化結構

[英]How to initialize structure in main function

我正在嘗試編寫簡單的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值時程序崩潰。

Image x = {0}

它是圖像元素x靜態內存分配

要么

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

它是圖像的動態內存分配, x是指向已分配內存的指針

calloc將分配emory並將所有內存啟動為0,因此結構中的指針將系統地啟動為NULL

如果要使用指針,則必須分配足夠的內存來容納結構。 但是,您嘗試取消引用空指針:這會導致未定義的行為。

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

然后你可以初始化成員。 注意:這里使用calloc是不可移植的,因為無法保證空指針具有全位為零的內存表示。

無論如何,似乎你不需要在這里使用指針。

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

如果你想要一個指向Image的指針,你必須像這樣初始化。

Image *x = NULL;

訪問圖像(x)陣營如下:

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

但首先你需要為你的圖像分配內存。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM