2013-03-30 68 views
0

我试图修改一些以前的代码,但发现程序使用的内存在运行时不断增加。所以可能会有内存泄漏。我的代码的主要部分包含以下循环内存泄漏与新的和删除

CEnergymulti* ener; 
double potential; 
double pottemp; 

potential=0.0; 
pottemp=0.0; 

for(int i=0;i<nbin;i++) 
{ 
ener = new CEnergymulti(np1,molfnames1,idiel); 
    pottemp=ener->calculatePot(ener->m_mols); 
    potential+=pottemp; 
delete ener; 
} 

其中'CEnergymulti'是一个类。我怀疑重复使用new和delete可能会导致内存泄漏问题,因为如果我只对循环内的代码执行单次运行,则在运行期间没有看到内存增加。如果确实是新的和删除的问题,我该如何解决这个问题?谢谢。

+3

我没有看到内存泄漏。你怎么确定你在泄漏内存?在你的代码上运行'valgrind'。 – Tushar

+1

也许'CEnergymulti'的析构函数没有完全释放它的内存。也许'calculatePot'泄漏内存。图沙尔的建议很棒:“valgrind”是一个理想的工具。 – nneonneo

+0

在这段特定的代码中,没有内存泄漏,因为您正在循环中分配并在循环中解除分配。因此,在下一次迭代之前分配的内存将被释放。 nneonneo的权利可能是你需要检查calculatePort部分。 – JackSparrow

回答

1

中有你展示的代码没有内存泄漏(除非对CEnergymulti一个严重实现的析构函数),但没有令人信服的理由使用动态分配的对象开始。为什么不直接使用:

CEnergymulti obj; 
pottemp=obj.calculatePot(obj.m_mols); 
potential+=pottemp; 

删除该uneeded newdelete,你不必费心手动内存管理CHINESE了。

+0

不能肯定地说!我们看不到所有的代码,并且有很多看不见的代码可能会泄漏。 – nneonneo