2017-09-27 43 views
0

我在C中實現了一個鏈表程序,create_node函數給出了一個警告:函數返回局部變量的地址。我已閱讀關於使用malloc,但我想了解沒有它的原始問題和解決方案。謝謝。鏈接列表函數返回本地變量的地址

struct list_node_s* Create_node(int val, struct list_node_s* node_p) { 
    struct list_node_s temp; 

    temp.data = val; 
    temp.next_p = node_p; 
    return &temp; 
} /* Create_node */ 
+1

相關https://stackoverflow.com/q/4824342/694576如果不是重複的。 – alk

+0

這是一件很難解釋的一條腿,但我會試圖成爲simpale 問題是當你創建一個變量沒有** malloc ** - 幕後你把變量放在堆棧上 - 內存段這節省了您當前代碼段的一些問題。 – Bizzu

+0

當你跳轉到函數時,你從某個點向你的堆棧添加東西,當你完成時(從無效函數返回或完成void函數),你從入口點釋放所有你保存的東西。 這意味着 - 在您的特定代碼中,您嘗試返回您保存在堆棧中的某個地址的地址,但是當您返回時釋放堆棧 - 您嘗試返回您「釋放」的某些東西。 。 – Bizzu

回答

0

的問題是,你的temp變量是本地變量。它具有函數範圍,所以只要程序在函數中就存在。這通常通過堆棧來實現。

您應該使用malloc獲得內存,這是所有動態分配的來源。這樣,列表及其節點將存在,直到您明確銷燬它們並使用free

唯一的其他解決方案,我不建議使用遞歸函數調用來構建您的列表。而且只要你使用清單永遠不會返回

我看到了一次。這是可怕的。但可能。