自己参照構造体について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
マイ

自己参照構造体について

#1

投稿記事 by マイ » 9年前

c言語/gcc/Linux

自己参照的構造体をprintf文で出力する関数を再帰的関数として作りたいのですが、何度やってもセグメンテーションエラーになってしまいます。

http://codepad.org/yhMQB6vC

ソースコードは上記のサイトに載せておきますのでそちらを参照ください。
void free_sts()はソースコードにありませんが、単純にメモリ領域の解放をするだけなので、載せていないことに意味もないので(じゃあ載せろよって思わないでw)、気にしないでください。
説明不足な点がありましたら補足します。
よろしくお願いします。

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

Re: 自己参照構造体について

#2

投稿記事 by naohiro19 » 9年前


アバター
MNS
記事: 35
登録日時: 9年前

Re: 自己参照構造体について

#3

投稿記事 by MNS » 9年前

セグメンテーションエラーは調べれば分かりますが、
基本的にメモリの不正な箇所にアクセスすると起こるエラーです。

void re_print_sts(struct st *s)
{
if(s != NULL){
printf("(%d, %d)\n",s->value1, s->value2);
re_print_sts(s + 1);
}
}

s+1の指す先に対するアクセスが許可されていないので、エラーが出ています。
それぞれの要素を各々で動的確保しているので、要素が連続しているなんてことは、
万が一でない限りありえません。配列とごっちゃになっているように思えます。

ここで、なぜre_print_sts(s + 1);としているのでしょうか?
わざわざ構造体のメンバでnextを宣言し、リスト構造を表現しているのですから、
これを渡すべきです。むしろ、そうでないと自己参照構造体の意味がないのでは?

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: 自己参照構造体について

#4

投稿記事 by bitter_fox » 9年前

naohiro19 さんが書きました:[迷信] 構造体のタグ名は下線で始めるを参照してください。
_で初めてないから特に問題はないんじゃないですか?

マイ

Re: 自己参照構造体について

#5

投稿記事 by マイ » 9年前

>MNSさん
そのやり方を教えてほしいのですが。

box
記事: 1747
登録日時: 9年前

Re: 自己参照構造体について

#6

投稿記事 by box » 9年前

s + 1
ではなくて、
s->next
ではないのでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る