2014-10-18 107 views
0
#include <stdio.h> 
#include <stdlib.h> 


typedef struct node 
    { 
    int data; 
    struct node * next; 
    } node; 

    int main() 
    { 
     node * head; 
     head->data=5; //crash 
    } 

我不明白爲什麼像這樣會崩潰?我一直在使用指針幾個月,但最簡單的例子似乎讓我難住。無效的指針分配

+3

你需要讓'head'指向一個'node'對象時,確保你無頭的。目前它並不指向任何你可以寫入的內容。 – juanchopanza 2014-10-18 15:16:17

+0

你能舉個例子嗎?我跟着你,但任何例子都可以幫助你設置。 – user3507072 2014-10-18 15:17:38

+0

'head'是寫保護的地方,它指向內存中的某個地方。 E.g'(NULL) - > data = 5;' – BLUEPIXY 2014-10-18 15:47:03

回答

4

要展開什麼juanchopanza在評論說:
node * head;創建了一個指針,但它不指向任何有效node結構。 你首先需要爲使用malloc分配空間,如:

node * head = malloc(sizeof(node));

也不要在你的程序結束忘了free,從而不會導致內存泄漏:

free(head);

+0

感謝你們兩位,我不知道爲什麼分配空間會通過我 – user3507072 2014-10-18 15:20:47

1

你沒有寫信給任何東西。

node *head = (node*)malloc(sizeof(node)); 

你是最正確的檢查malloc的回報和成品

+4

請不要在C – UnholySheep 2014-10-18 15:23:17

+1

中施放'malloc'感謝@unholysheep只是查了一下。我認爲這是需要的 – exussum 2014-10-18 15:29:24