清除C ++中的内存问题

时间:2014-10-22 06:08:34

标签: c++ memory

我有一个生成随机3D网络结构的C ++代码。我运作良好,如果我手动运行(从终端),我得到两个不同的结构,如预期的那样。

但是,如果我创建一个小循环来连续10次启动它,它会产生完全相同结构的10倍,这是不正常的。如果我在代码的末尾添加一个sleep(1)行,它会再次起作用,所以我猜它与C ++释放内存有关(我绝对没想到,所以我可能完全错了)。

问题是,通过添加sleep(1)命令,运行需要更多时间(多10倍)。这当然不是10次运行的问题,但目的是制造1000次。

有没有办法强制C ++在代码末尾释放内存?

1 个答案:

答案 0 :(得分:2)

C ++根本不会自动释放内存(析构函数中的代码除外),所以情况并非如此。

但随机数发生器使用系统时钟计数器(我可能在这里错了)。 在pascal语言中,您应该调用randomize过程来使用种子初始化随机生成器。如果不这样做,随机数生成器会在每次运行时生成相同的结果,这与您的情况非常相似

在C ++中,有srand函数以当前时间为特征,例如http://en.cppreference.com/w/cpp/numeric/random/rand

我不知道你是如何启动rand生成器的,但是如果你这样做的时间是秒分辨率而你的代码足够快就能在一秒钟内完成10个循环 - 这可能就是一个例子。它解释了1秒延迟如何解决问题。

如果是这样的话,你可以尝试更高分辨率的时间功能。同样在c ++ 11 stl中,有很多强大的随机模块(如在boost库中,如果你没有c ++ 11x)。文档在这里http://www.cplusplus.com/reference/random/