我的程序因“std :: bad_alloc”错误消息而失败。该程序是可扩展的,所以我在valgrind的较小版本上进行了测试,没有内存泄漏。
这是统计力学的应用,所以我基本上制作了数百个对象,改变了它们的内部数据(在这种情况下是双向的stl向量),并写入数据文件。对象的创建位于循环内部,因此当它结束时,内存是免费的。类似的东西:
for (cont=0;cont<MAX;cont++){
classSection seccion;
seccion.GenerateObjects(...);
while(somecondition){
seccion.evolve();
seccion.writedatatofile();
}}
因此,有两个变量可以设置程序的计算时间,系统大小和运行次数。对于具有许多运行的大型系统,只有崩溃。关于如何捕捉这个记忆问题的任何想法?
谢谢,
答案 0 :(得分:3)
在调试器下运行程序,以便在抛出异常后停止并且您可以观察调用堆栈。
三个最可能的问题是:
答案 1 :(得分:3)
valgrind不会显示内存泄漏,因为你可能没有valgrind会找到的内存泄漏。
实际上,Java等垃圾收集语言可能会发生内存泄漏。尽管内存在那里得到了清理,但这并不意味着糟糕的程序员无法无限期地持有他们不再需要的数据(例如无限地构建哈希映射)。垃圾收集器无法确定用户是否真的不再需要该数据。
你可能会在这里做类似的事情,但我们需要看到你的更多代码。
顺便说一下,如果你有一个确实拥有大量数据的集合,你通常最好使用std :: deque而不是std :: vector,除非你真的需要它们都是连续的。