2016-05-14 4 views
2

私はツリーのためのcプログラムを書いています。ツリーノードに新しいノードを割り当てるときにプログラムがクラッシュする

#include<stdio.h> 
#include<stdlib.h> 

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

struct node* newNode(int value){ 
    struct node* temp; 
    temp->left = NULL; 
    temp->right = NULL; 
    temp->data = value; 

    return temp; 
} 

int main(){ 
    struct node *root; 
    root = newNode(60); 
    root->left = newNode(40); 
    root->right = newNode(80); 
    root->left->left = newNode(30); // program crashes here. 
    root->left->right = newNode(50); 

} 

これは私が書いている別のプログラムのサブセクションです。デバッグ中にnewNode(30)を割り当てる際にエラーが発生していることがわかりました。なぜ私は理解できないのですか? 、あなたはあなたのnewNode()機能で

+1

'struct node * temp;' - > 'struct node * temp = malloc(sizeof(* temp));' – BLUEPIXY

答えて

6

struct node* temp; 
temp->left = NULL;  //invalid memory access 
temp->right = NULL; //invalid memory access 
temp->data = value; //invalid memory access 

を行っているが、、tempは、任意の有効なメモリを割り当てられていません。無効なポインタを間接参照すると、undefined behaviorが呼び出されます。

tempを参照解除する前に、メモリをtempに割り当てる必要があります。あなたは仕事を得る必要があります

struct node* temp = malloc (sizeof *temp); 
if (temp) 
{ 
    temp->left = NULL; 
    temp->right = NULL; 
    temp->data = value; 
} 

これを成し遂げるためにmalloc()や家族の使用を作る、何かのように、

ことができます。

3

新しいノードのメモリを割り当てる必要があります。

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

そして、あなたの完了時に再度メモリをfreeするために覚えておく必要がありますように。

関連する問題