• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 遺伝的アルゴリズムでのエラーについて)

C言語で遺伝的アルゴリズムを使った乱数のグループ分け

このQ&Aのポイント
  • C言語で遺伝的アルゴリズムを使って乱数のグループ分けを行うプログラムについての質問です。
  • プログラムを実行するとsegmentation faultが発生することがあり、その原因が分からないため回答を求めています。
  • 目的は与えられた乱数を2つのグループに分け、2つのグループの差をなるべく小さくすることです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

Segmantation Fault は領域外へアクセスしたときに発生するもので、プログラム上の原因は次のようなものがほとんどです ・確保させていない領域にアクセスした  NULL、freeした後の領域等 ・配列の添字が範囲外 ですから、まずは、上記の点問題無いかを調べます。 エラーなくコンパイルできたかどうかは関係ありません。 で、プログラムを全部チェックするのは面倒ですが、それでも、斜め読みでもわかるくらいおかしな点を http://okwave.jp/qa/q8589069.html で指摘させていただきましたが、今回のプログラムでもまったく直ってません。 (rand()/32767); おそらく、[0,1]の乱数を期待しているようですが、2つの理由から、そうはなっていません。 そのことは理解できていますか?

y_ssoccerking
質問者

お礼

RAND_MAXは理解し、訂正したのですが訂正前のものをのせてしまいました。 無事解決できました。 ありがとうございます。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

なんというか…いまいち読む気にならないですねぇ……。 # define定義と変数が入り交じる感じで読みにくい。 とりあえず…… >if(rand()/32767 < Mutation_ratio){ >abc = (Number_of_gene-1) * (rand()/32767); の結果は正常なんですかね? # abcが0から(Number_of_gene-1)の範囲に間違いなく収まります? ご使用の環境ではRAND_MAXはいくつなんでしょう? # 32767というマジックナンバーは…なんでしょう?? ちなみに…私なら除算ではなく剰余を使いますけどね。 abc = rand() % Number_of_gene; とか。(これならNumber_of_gene以上の値にはならないのでバッファオーバーランしないし)

  • kngj1740
  • ベストアンサー率18% (197/1052)
回答No.1

直接の回答にはなりません。開発環境のデバック機能を利用して、落ちるところ(直前?)を突き止め、ロードマップなどを参照してどのステートメントかを突き止める。あるいはソースレベルデバッグが可能な開発環境ならさらに楽です。そこの変数を確認、多分、配列の大きさを超えてアクセスしようとしてるのでは。乱数発生で行われているため、毎回同じ結果にならないだけと思います。

関連するQ&A