2016-11-13 4 views
0

私はプロシージャ本体の内側に、構造体へのポインタ間のコピーを作成しようとした場合、私は、セグメンテーションフォールトエラーを取得していますでのみ動作します。割り当ては、メインの内側ではなく、プロシージャ本体

代わりに、main()本体内のポインタ間でコピーを作成すると、すべて正常に動作します。

コード:

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

typedef struct node { 
    int value; 
    struct node *father, *lchild, *rchild; 
} node; 

typedef struct node Node; 

// Prototypes 
Node* insertRoot(int val, Node* N); 


int main(){ 

    Node * A = NULL; 

    Node * b = insertRoot(10, A); 

    //A = b; // If I do the assignment here it works correctly. 

    printf("A->value = %d \n\n" , A->value); //Segmentation fault! 

    return 0; 
} 

Node* insertRoot(int val, Node* N){ 
    Node* temp = malloc(sizeof(Node)); 
    temp->value = val; 
    temp->father = NULL; 
    temp->lchild = NULL; 
    temp->rchild = NULL; 

    N = temp; // If I do the assignment here instead, it won't work. 

    return temp; 
}; 

答えて

1

はあなたがAのコピーであるNに割り当てる、insertRootAに任意の値を代入されていません。値はA=NULLのままです。

+0

したがって、 'A'のコピーではなく、' A'の値をコピーしたい場合は、Aの代わりに 'insertRoot'シグネチャのAへのポインタを渡す必要がありますか? – fbid

+0

これを行うことはできますが、2番目の 'inserRoot'パラメータを取り除いて' A = insertRoot(10) 'を実行するのはなぜですか? –

+0

これは、私が問題となっていたことをより明確に示すために書いた最小サンプルコードでした。私のフルコードでは、 'inserRoot'はvoid関数なので、その本体の中にポインタ間でコピーを作成する必要があります。 – fbid

関連する問題