私はCプログラムを書いた。関数内でのコードの一部は次のようになります。CでNULLへのポインタへのポインタを初期化して宣言できないのはなぜですか?
struct node* functionName(struct node *currentFirstPointer){
struct node **head = NULL;
*head = currentFirstPointer;
return *head;
}
ここ
node
が構造体です。しかし、この行は私がプログラムを実行するとき私にsegmentation fault
を与えます。しかし、私が宣言し、ポインタのポインタを別の文の中で以下のような同じ関数の中で初期化すると、うまくいきます。
struct node* functionName(struct node *currentFirstPointer){
struct node **head;
*head = NULL;
*head = currentFirstPointer;
return *head;
}
第1ブロックが機能せず、第2ブロックが正常に動作する理由は何ですか?
あなたは[___MCVE___](http://stackoverflow.com/help/mcve)の作成を気にしますか? –
第1の例は正常に動作し、第2の例は正常に動作していますか?それは意味をなさないからです。あなたは他の方法を意味していないのですか?最初の例でseg faultが発生している場合、問題はポストされたコードにありません。 – Lundin
私はそれがあなたのケースでは未定義の動作だと理解していますが、これをVisual Studioで再現できないため、どのコンパイラを使用しているか教えてください。 –