簡體   English   中英

如何為結構分配堆內存?

[英]how do I allocate heap memory for the struct?

我有以下代碼

struct USER{

   int human_id_number;

   char first_name_letter;

   int minutes_since_sneezing;

} *administrator;

現在我想分配堆內存

這是我的嘗試

administrator *newStruct = (administor*)malloc(sizeof(administrator));

不確定這是否正確...

struct USER {
   int human_id_number;
   char first_name_letter;
   int minutes_since_sneezing;
} *administrator;

這不僅是一個結構聲明,它還是一個變量聲明...它與以下內容相同:

struct USER {
   int human_id_number;
   char first_name_letter;
   int minutes_since_sneezing;
};

struct USER *administrator;

因此,當您隨后使用sizeof(administrator) ,將得到“ 指針的大小 ” ...這很可能不是您想要的。

可能想做更多這樣的事情:

struct USER {
   int human_id_number;
   char first_name_letter;
   int minutes_since_sneezing;
};

int main(void) {
    struct USER *administrator;

    administrator = malloc(sizeof(*administrator));
    /* - or - */
    administrator = malloc(sizeof(struct USER));

    /* check that some memory was actually allocated */
    if (administrator == NULL) {
        fprintf(stderr, "Error: malloc() returned NULL...\n");
        return 1;
    }

    /* ... */

    /* don't forget to free! */
    free(administrator)

    return 0;
}

sizeof(*administrator)sizeof(struct USER)都將為您提供“ USER結構的大小 ”,因此malloc()的結果將是一個指向足以容納該結構數據的內存的指針。

struct USER{
    int human_id_number;
    char first_name_letter;
    int minutes_since_sneezing;
} *administrator;

這將管理員定義為指針變量。 但是,從其他代碼

administrator *newStruct = (administor*)malloc(sizeof(administrator));

看來您想將其用作類型。 為此,您可以使用typedef。

typedef struct USER{
    int human_id_number;
    char first_name_letter;
    int minutes_since_sneezing;
} administrator;

然后使用

administrator *newStruct = (administrator *)malloc(sizeof(administrator));

暫無
暫無

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

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