• ベストアンサー

プログラムが正しく動きません。

http://plaza.rakuten.co.jp/kakuekiteisha5/diary/200912260000/のページの素数判定プログラムで、 コンパイルは問題なく通るのですが、 実行すると、同じ入力でも結果が変わったり、 デバッグ時に同じ入力で Program terminated with signal SIGABRT, Aborted. というエラーが出たり出なかったりします。 原因がどうしてもわかりません。 どなたかよろしくお願いします。 ちなみに、コンパイラはgcc、デバッガはgdbを使っています。

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

  • ベストアンサー
回答No.3

isprime関数の行っていることがおかしいのでは? 具体的には x=myalloc(m); y=myalloc(m); one=myalloc(m); nt=myalloc(m); q=myalloc(m); np1m=myalloc(m+1); で領域を確保した後、 それぞれのポインタを nt=sub(n, one, m); とか q=nt; などと更新しています。更新することはかまわないのですが、その後、 free(x); free(y); free(one); free(nt); free(q); free(np1m); と更新したポインタを用いてfreeしています。 こんなことすると、一度開放した領域を再度開放したり、開放すべき領域を開放しなかったり、へんな領域を開放したりしてしまいます。その結果、メモリの内容がおかしくなると思うのですが・・・・・・。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

ある1個の数値が素数かどうかを判定するためだけに そんなに長いコードが必要でしょうか。 今のコードでは、2も3も素数ではないと判定しています。 isprime関数を中心に、全体のロジックを見直す方がよいと思います。

回答No.1

解説はおろかコメントすらない400行を越えるコードを読んでもらおうというのが非常識

関連するQ&A