正在清除C++中的内存问题

Clearing memory issue in C++

本文关键字:内存 问题 C++ 清除      更新时间:2023-10-16

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

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

问题是,通过添加sleep(1)命令,运行所需的时间要多得多(增加了10倍)。这当然不是10次跑步的问题,但目标是达到1000次。

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

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

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

在C++中,有一个srand函数,它通常由当前时间初始化,就像在那里的例子一样http://en.cppreference.com/w/cpp/numeric/random/rand

我不知道你是如何初始化你的rand生成器的,但如果你这样做的时间分辨率是秒,并且你的代码足够快,可以在一秒钟内完成10个循环,这可能是一种情况。它解释了1秒延迟是如何修复这种情况的。

如果是这样的话,你可以尝试一个分辨率更大的时间函数。此外,在c++11stl中,有很多powerfull随机模块(如果没有c++11x,则与boost库一样)。文档在这里http://www.cplusplus.com/reference/random/