2014-10-22 60 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