• ベストアンサー

構造体のポインタにNULLが入らない

typedef struct tag{ int number; char name[10]; struct tag *next; }DATA; という構造体があって、 DATA *p; と宣言し、 p->next == NULL; とすることはできないんですか? セグメンテーション違反になってしまうのですが。 pが指すnextにNULLを入れるにはどうしたらいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

>DATA *p; >と宣言し、 これは、DATAという型のポインタ変数を定義しただけなので、メモリ上にDATA構造体はまだ存在しません。 なので、その後に、 p=(*DATA)malloc(sizeof(DATA)); などと書いてDATAの領域を確保してください。 また、確保した領域はゴミデータが入っている場合があるので初期化を忘れずに。 >p->next == NULL; これ(==)は代入ではなくて比較演算子です。 p->next = NULL; と、代入してやってください。 あと、pがいらなくなったらfree()しないとメモリーリークします。 と、してください。

wachi888
質問者

お礼

なるほど!領域を確保しなければいけなかったんですね。理由が分かりました。 (==)の初歩的なミスまでして恥ずかしい限りです。 素早い回答大変ありがとうございました。

関連するQ&A