0

私は遺伝的アルゴリズムプログラムを持っています、すべてがベクトルを使用して動的に割り当てられます。コンパイル時に設定される世代または世代ごとの個人の数はどこにもありません。

500、1000、2000世代を使用して試してみましたが、完璧に動作します。それから私は10,000世代を試しました。デバッグアサーションが失敗し、世代4966でベクトル添え字が範囲外になりました。

同じパラメーター、10,000世代で2回再試行しましたが、正常に実行されました。

もう一度試してみましたが、7565世代でエラーが発生しました。

完全に機能することもあれば、エラーが発生することもあるのは不思議です。特に、すべてがベクトルを使用して行われることを考えると。

問題がどこから来るのかについてのアイデアはありますか?デバッグモードが何らかの理由でバグがあるのではないでしょうか。

4

1 に答える 1

1

問題は、スタックの破損、またはおそらくインデックスの範囲外アクセスに起因します。コードがクラッシュする場合があるという事実は、何か問題があることを示しています。コードがマルチスレッドの場合、問題は、アクションが特定の順序で実行された場合、コードがベクトルの範囲外の何かにアクセスしようとするためである可能性があります。

私のアドバイスは、 valgrindを使用してコードを実行し、それが何を言うかを確認することです。通常、同様の問題を解決するのに役立ちます。

また、コードがクラッシュしない場合があるという事実にも注意してください。これは、コードが完全に機能することを意味するわけではありません。まだスタックが破損している可能性があります。

于 2013-03-19T14:01:38.847 に答える