2013-03-30 3 views
0

이전 코드를 수정하려고했지만 프로그램이 계속 실행되면서 사용되는 메모리가 계속 증가하는 것을 확인했습니다. 그래서 메모리 누출이있을 수 있습니다. 내 코드의 주요 부분은 다음과 같은 루프 'CEnergymulti'는 클래스이다새 메모리 삭제 및 삭제

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; 
} 

을 포함하고 있습니다. 루프의 코드에 대해 단일 실행 만 수행하면 실행 중에 메모리가 증가하지 않았기 때문에 새 코드 및 삭제를 반복해서 사용하면 메모리 누수 문제가 발생할 수 있습니다. 새롭고 삭제 된 것이 실제로 문제가된다면 어떻게 해결할 수 있습니까? 감사.

+3

메모리 누수가 표시되지 않습니다. 어떻게 기억이 새어 나올거야? 코드에서'valgrind'와 같은 것을 실행하십시오. – Tushar

+1

아마도'CEnergymulti'의 소멸자가 메모리를 완전히 비울 수는 없습니다. 아마도'calculatePot' 메모리가 누출되었을 수도 있습니다. 투 샤르 (Tushar)의 제안은 훌륭하다. 'valgrind'는 이상적인 도구이다. – nneonneo

+0

이 특정 코드에서는 루프에서 할당하고 루프에서 할당을 해제 할 때 메모리 누수가 없습니다. 따라서 할당 된 메모리가 다음 반복 전에 해제됩니다. nneonneo의 권리는 calculatePort 부분을 점검 할 필요가 있을지도 모른다. – JackSparrow

답변

1

표시된 코드에 메모리 누수가 없습니다 (CEnergymulti에 대해 잘못 구현 된 소멸자가없는 한) 동적 할당 객체를 사용할 이유가 없습니다. 왜 단순히 사용

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

는 uneeded newdelete 삭제하고 당신은 더 이상 수동 메모리 mangement에 대해 걱정 할 필요가 없습니다.

+0

확실히 말할 수는 없습니다! 우리는 모든 코드를 볼 수 없으며 누설 될 수있는 많은 보이지 않는 코드가 있습니다. – nneonneo