簡體   English   中英

修改並返回指向結構的指針

[英]modify and return a pointer to a struct

我正在研究LIFO堆棧結構,以單鏈列表的形式實現:

typedef struct spile {
    char ch;
    struct spile *address;
} Spile, *Pile;

我想編寫一個將元素(char)添加到列表開頭的push函數。

為什么這樣的事情會導致核心轉儲:

Pile add_head (Pile P, char c) {
    P->address = P;
    P->ch = c;
    return P ;
}

雖然類似的功能(這次刪除head元素)有效嗎?

Pile remove_head (Pile P) {
    P = P->adress;
    return P;
} 

我知道我可以這樣處理:

#define MALLOC(t)      ((t*)malloc(sizeof(t)))

Pile add_head (Pile P, char c) {
    Pile P1 = MALLOC(Spile);
    P1->address = P;
    P1->ch = c;

    return P1;
}

但是我希望函數修改P而不返回新的指針。 此外,由於我沒有在任何地方釋放(P1),如果我沒記錯的話,上述版本會導致內存泄漏。

編輯:add_head這樣調用

Pile my_pile = NULL;
my_pile = add_head(my_pile, 'z');

當我說要修改add_head中的參數P時,我的意思是P應該由函數返回,但其中應包含新元素。

我想要( add_head )函數修改P而不返回新的指針。

如果要向結構中添加新元素,則需要為此新元素分配內存。

如果應將此新元素添加到列表的開頭,則標題指針將更改為新位置。

Old List with A,B,C
 ___       ___       ___       ______ 
| A | --> | B | --> | C | --> | NULL |
|___|     |___|     |___|     |______|
 Head

New List after adding element D
 ___       ___       ___       ___       ______ 
| D | --> | A | --> | B | --> | C | --> | NULL |
|___|     |___|     |___|     |___|     |______|
 Head

您編寫的第二個函數(使用malloc )是必需的。

暫無
暫無

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

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