2010-12-21 89 views
1

原諒這個問題的初學者水平。我有以下簡單的代碼,但它似乎並沒有運行。它得到了分段錯誤。如果我用一個簡單的實際變量來替換指針,它運行良好......我不知道爲什麼。爲什麼這個簡單的hello世界代碼segfaulting?

struct node 
{ 
int x; 
struct node *left; 
struct node *right; 
}; 

int main() 
{ 
struct node *root; 
root->x = 42; 
printf("Hello world. %d", root->x); 
getchar(); 
return 0; 
} 

這段代碼有什麼問題?

回答

10
struct node *root; 
root->x = 42; 

您正在取消引用未初始化的指針。

struct node *root = malloc(sizeof(struct node)); 

您也可以在棧上分配一個節點:要爲節點分配存儲

struct node root; 
root.x = 42; 
+0

所以我應該用某種初始化做前綴? struct node * root = new(struct node);或者其他的東西? – socks 2010-12-21 22:46:58

-1

struct node *root;線添加

root = (sturct node*) malloc(sizeof(struct node)); 

此外,前Return 0線添加

free(root); 
1

爲了使用指針來訪問某些東西,指針必須指向那個東西。爲了讓指針指向某個東西,必須存在某個東西。創建一個指針不會創建任何東西來指向它。您必須通過動態分配(malloc()),堆棧分配(即本地變量)或指向已存在的內容(例如,全局的static實例;作爲參數傳入的值等)。

相關問題