這個問題在這里已經有了答案: 如果使用未初始化的指標寫入記憶體怎么辦? (4 個回答) 5 小時前關閉。
我對C相當陌生,想創建一個鏈表。對于串列元素,我創建了一個結構并希望在函式中初始化頭元素。串列的最后一個元素應包含一個空指標,所以我知道,當我到達末尾時。但是如果我在函式內部初始化next為 NULL,我會得到一個“分段錯誤(核心轉儲)”
我試圖谷歌這個,但我沒有找到答案。之后,我將函式中的代碼放入我的 main 中,并且它起作用了。但為什么?這是完全相同的代碼。
內部函式:
#include <stdlib.h>
struct list_node
{
unsigned long value;
struct list_node *next;
};
void new_list()
{
struct list_node *cache;
cache->next = NULL;
}
int main()
{
new_list();
return 0;
}
內部主要:
#include <stdlib.h>
struct list_node
{
unsigned long value;
struct list_node *next;
};
int main()
{
struct list_node *cache;
cache->next = NULL;
return 0;
}
uj5u.com熱心網友回復:
您宣告了一個具有不確定值的未初始??化指標。
void new_list()
{
struct list_node *cache;
cache->next = NULL;
}
所以取消參考指標
cache->next = NULL;
呼叫未定義的行為。
第二個程式也存在同樣的問題
int main()
{
struct list_node *cache;
cache->next = NULL;
return 0;
}
那就是第二個程式也有未定義的行為。
你應該做的就是寫
int main()
{
struct list_node *cache = NULL;
return 0;
}
那是最初您的串列是空的。所以最初沒有struct list_node分配型別的物件并且指標cache等于NULL.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523645.html
上一篇:將表檔案讀入C中的陣列
