2013-03-19 77 views
0

我有一個遺傳算法程序,一切都是使用向量動態分配的。編譯時每代都沒有代數或個體數量。下標向量有時超出範圍

我試過它使用500,1000,2000代,它運行完美。然後我試了一萬代。它給了我調試斷言失敗,在第4966代的向量下標超出範圍。

我再次嘗試兩次相同的參數,10,000代,它運行良好。

我試了一次,我在代7565.

很奇怪的是,有時它完美的作品得到了錯誤,有時我得到的錯誤。特別是考慮到一切都是使用矢量完成的。

關於問題從何而來的任何想法?也許調試模式出於某種原因是越野車?

+6

問題來自代碼中的錯誤。沒有看到你的任何代碼,很難猜出它可能是什麼。 – john 2013-03-19 13:56:31

+0

你是否初始化你的向量?如果沒有,你可以根據隨機數據做出決定。也許使用Valgrind? – RichieHindle 2013-03-19 13:57:31

+2

「奇怪的是,它有時可以完美運行,有時我會得到錯誤」 - 不,事實並非如此。我有很多與我的錯誤。請告訴我們的代碼。 – 2013-03-19 13:57:33

回答

1

問題來自堆棧損壞或最可能來自索引超出邊界訪問。事實上,有些情況下,你的代碼崩潰表明有什麼問題。如果你的代碼是多線程的,那麼問題可能是因爲如果以給定的順序執行動作,你的代碼將嘗試訪問向量以外的東西。

我的建議是使用valgrind運行你的代碼,看看它會說什麼。通常它有助於解決類似的問題。

另請注意,有些情況下,您的代碼不會崩潰,這並不意味着它可以很好地工作。您可能仍然存在堆棧損壞或類似情況。