2012-07-02 42 views
2

我有一個結構稱爲節點如下:設置一個指向空段錯誤

struct node { 
    int data; 
} 

存儲在一些結構:

struct structure { 
    struct node *pointer; 
} 

我試圖指針設置爲NULL,如下所示:

struct structure *elements; 
elements->pointer = NULL; 

這是爲什麼段錯誤?在將其設置爲空之前,它是否實際嘗試取消引用指針?

當我轉elements從指針到實際的結構並執行以下操作:

struct structure elements; 
elements.pointer = NULL; 

它停止和段錯誤的作品。爲什麼不將指針設置爲空作業?

+1

哇,這個問題很快得到解決 –

回答

6
struct structure *elements; 
elements->pointer = NULL; 

elements指針指向無處。解引用無效指針(elements指針)是未定義的行爲。

您需要elements指針初始化爲有效的對象,如:

struct structure my_struct; 
struct structure *elements = &my_struct; 
elements->pointer = NULL; 
0

elements尚未初始化爲指向任何東西。

1

您沒有初始化*elements

*elements現在指向沒有,所以elements->pointer沒有引用任何東西,它給你你的段錯誤。

+0

他解引用**未初始化的**指針。它可能也可能不是'null'。 –

+1

停止downvoting技術上的每個人,@格拉漢姆,我已經編輯我的答案。 –

4

需要初始化指針

struct structure *elements = malloc(sizeof(struct structure)); 

如果你不這樣做,它會指向一個任意的內存位置。

2

你derefrencing無效的指針,因此內存設計缺陷,是不是elements->pointer,但elements本身。由於它尚未設置(例如:由malloc),它可能指向內存中的任何位置。

+0

他正在取消引用**未初始化的**指針。它可能也可能不是'NULL'。 –

相關問題