• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:reallocとstrtokの併用について)

reallocとstrtokの併用について

このQ&Aのポイント
  • reallocすると先頭から徐々にデータが文字化けしていきます。
  • 5つ目が見つかった時点では出力に問題は無いのですが、6個目から侵食が始まっていきます。
  • 原因がどうしても自分では分からなかったので、誰かお願い致します。

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

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>if(cnt>3&&cnt%4==0){//サイズが足りなくなった時 >char **tmp2; >if((tmp2=(char **)realloc(*words,sizeof(char *)*(4+4*(cnt%4))))==NULL){ ifの条件とrealloc()するサイズをよくみましょう。 また直接関係する事ではありませんがポインタ値を"%x"で出力させるのは間違ってます(sizeof(int) == sizeof(void *)の環境では動きはしますが)。

jororo0
質問者

お礼

ご回答ありがとうございます。 cnt>3で初めての時は4=cntのときにcnt%4==0で5個目で、 cnt>3で2回目の時は8=cntの時にcnt%4==0で9個目で、 …でここは合ってますか? sizeofの後の定数は元のサイズで、4*(cnt%4)は…ゼロ!? 動きました!ありがとうございます!! 本当にありがとうございます。全然気づきませんでした。 アドレスの出力の方ですが、まさしくポインタの値は整数と同じビット数だと思ってました。 これからは%pの方に直します。

その他の回答 (2)

  • honor
  • ベストアンサー率35% (25/71)
回答No.3

分割したトークンの実体を格納している領域はどこですか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

readlinefileは、realloc()したwordsをどうやってmain()に返してるんでしょうか。

jororo0
質問者

補足

ご回答ありがとうございます。 返して無いですね。reallocで返ってきたアドレスが同じだったみたいです。 修正版上げました。ー>http://www1.axfc.net/u/3352861.c いい忘れましたが、ソースファイルで字下げの無いところは削除しても問題ありません。

関連するQ&A