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

清除C+中的内存问题+; < >我有一个C++代码,生成随机的3D网络结构。我工作得很好,如果我手动运行它(从终端),我会得到两种不同的结构,正如预期的那样,c++,memory,C++,Memory,但是,如果我创建一个小循环来连续启动它10次,它会产生10次完全相同的结构,这是不正常的。如果在代码末尾添加了睡眠(1)< /Cord>行,它又工作了,所以我猜它是与C++释放内存有关的东西(我绝对不是一个预期,所以我完全错了)。p> 问题是,通过添加sleep(1)命令,运行时间要长得多(多10倍)。这当然不是10次跑步的问题,但目标是达到1000次 有没有办法强制C++在代码末尾释放内存?< /强> C++,P> C++不自动释放内存(除了析构函数中的代码),情况并非如此。 但是随机数生

但是,如果我创建一个小循环来连续启动它10次,它会产生10次完全相同的结构,这是不正常的。如果在代码末尾添加了<代码>睡眠(1)< /Cord>行,它又工作了,所以我猜它是与C++释放内存有关的东西(我绝对不是一个预期,所以我完全错了)。p> 问题是,通过添加
sleep(1)
命令,运行时间要长得多(多10倍)。这当然不是10次跑步的问题,但目标是达到1000次


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

C++,P> C++不自动释放内存(除了析构函数中的代码),情况并非如此。 但是随机数生成器使用系统时钟计数器(这里我可能错了)。 在pascal语言中,您应该调用
randomize
过程来初始化带有种子的随机生成器。如果不这样做,随机数生成器会在每次运行时产生相同的结果,这与您的情况非常相似

<>在C++中,存在当前时间类型化的<>代码> SRAND < /代码>函数,例如在示例

我不知道如何初始化rand生成器,但如果您以秒分辨率执行此操作,并且您的代码足够快,可以在一秒钟内执行10个循环,则可能会出现这种情况。它解释了1秒延迟如何修复这种情况


如果是这样,你可以尝试一个分辨率更高的时间函数。同样在c++11STL中,有很多强大的随机模块(如在boost库中,如果没有c++11x)。文档在这里

“我可能完全错了”。你是。@user657267嗯,整个代码有2000行长。。。我想知道是否可以用一种更一般的方式来回答…@Wiliam如果你不愿意花时间去调试,不要指望其他人能够神奇地调试你的代码。在
valgrind
下运行你的代码-这会让你直接找到错误。很抱歉。错误出现在第1763行。您应该在程序中只为随机数生成器种子设定一次,而不是在循环中。