2014-10-22 61 views
-3

我有一個生成隨機3D網絡結構的C++代碼。我工作的很好,如果我手動運行它(從終端),我會得到兩個不同的結構,如預期的那樣。清除C++中的內存問題

但是,如果我創建一個小循環來連續10次啓動它,它會產生10次完全相同的結構,這是不正常的。如果我在代碼的末尾添加一行sleep(1),它會再次起作用,所以我想這是與C++釋放內存有關的事情(我絕對不是期望,所以我可能完全錯誤)。

問題是,通過添加sleep(1)命令,運行需要更多時間(10倍以上)。這當然不是10次運行的問題,但目標是製造1000次。

有沒有辦法強制C++在代碼的最後釋放內存?

+3

Post.Your.Code。 – user657267 2014-10-22 06:10:21

+3

「我可能完全錯了」。你是。 – 2014-10-22 06:11:35

+0

@ user657267那麼,整個代碼是2000行長......我想知道它是否可以以更一般的方式回答...... – Wiliam 2014-10-22 06:13:41

回答

2

C++根本不會自動釋放內存(除了析構函數中的代碼),所以情況並非如此。

但隨機數發生器使用系統時鐘計數器(我可能在這裏是錯誤的)。 在pascal語言中,您應該調用randomize過程來初始化具有種子的隨機生成器。如果不這樣做,隨機數發生器產生每次運行時相同的結果,至極非常喜歡你的情況

在C++中有srand功能是typycally由當前的時間比如有http://en.cppreference.com/w/cpp/numeric/random/rand

我沒有在inited,像知道你如何初始化你的rand生成器,但是如果你這樣做的時間是秒分辨率,並且你的代碼足夠快,可以在一秒鐘內完成10次循環 - 這可能是一種情況。它解釋瞭如何1秒延遲修復情況。

如果是這樣的話,你可以試試更大分辨率的時間函數。同樣在C++ 11 stl中,有很多強大的隨機模塊(如boost庫中,如果你沒有C++ 11x)。文檔在這裏http://www.cplusplus.com/reference/random/

+0

謝謝,它的工作就像一個魅力! – Wiliam 2014-10-22 06:54:02

+1

你應該只在你的程序中種下你的隨機數發生器,永遠不要循環。 – 2014-10-22 07:35:15