2012-03-20 15 views
0

は、ここに私のコードなぜNULLポインタが機能しないのですか?

class LList{ 
struct Elem{int data;Elem *next;};  
Elem *head; 
public: 


void Push(int dat){ 
    if(head==NULL){ 
    head=new Elem; 
    head->data=dat; 
    head->next=NULL; 
    } else { 
    // ...... 
    } 
} 

だが、私はそれを使用する場合、それは動作しません。問題は、ポインタがNULLになることは決してありませんし、NULLにする必要があります。私がNULLをコンストラクタ内のポインタに割り当てても、それは動作しません。 Visual Studioは私に希望のメモリ位置にアクセスできないというエラーを表示します。

+3

サンプルコードに改行を追加してください。 –

+1

'head'を逆参照する必要がありますか?あなたがそれにアクセスしたときに '* head'? – alex

+2

「なぜXが動作しないのですか」は間違った質問です。適切な質問は、 "Xの作業をしようとする際に間違いがどこにあるか"です。あなたは完全に理解するまで、Xは実際には動作しないと推測することはできません。 –

答えて

1

ctorでheadを初期化するだけで動作します。

class LList{ 
    //... 
    LList() : head(0) {} // or head(NULL) if you prefer 
    // ... 
}; 

注:たとえば== TRUE用として== NULLと比較 IIRC、それが考慮されて均等に悪いスタイル...(私ではないので、謙虚な意見では)より良いスタイルはif(!head)ですが、それは化粧品です。だからメモ。

+2

彼はすでにコンストラクタの 'head'を初期化してもそれを修正していないと言っています。 – VeeArr

+0

ありがとう:D – Transcendental

+0

@VeeArr:しかし、彼はctorを表示せず、ctorの初期化子リストを使用していない場合にctorの他の何かが干渉した可能性が高いテキストとして暗示されています)。かなり違い、IMO。 – 0xC0000022L

関連する問題