- ベストアンサー
プログラムが正しく動きません。
http://plaza.rakuten.co.jp/kakuekiteisha5/diary/200912260000/のページの素数判定プログラムで、 コンパイルは問題なく通るのですが、 実行すると、同じ入力でも結果が変わったり、 デバッグ時に同じ入力で Program terminated with signal SIGABRT, Aborted. というエラーが出たり出なかったりします。 原因がどうしてもわかりません。 どなたかよろしくお願いします。 ちなみに、コンパイラはgcc、デバッガはgdbを使っています。
- みんなの回答 (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)
ある1個の数値が素数かどうかを判定するためだけに そんなに長いコードが必要でしょうか。 今のコードでは、2も3も素数ではないと判定しています。 isprime関数を中心に、全体のロジックを見直す方がよいと思います。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
解説はおろかコメントすらない400行を越えるコードを読んでもらおうというのが非常識