2010-12-21 31 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实例;作为参数传入的值等)。

相关问题