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 を繰り返し使用すると、メモリ リークの問題が発生する可能性があると思われます。ループ内のコードを 1 回実行しただけでは、実行中にメモリの増加が見られなかったからです。それが本当に new と delete の問題である場合、どうすればこれを修正できますか? ありがとう。

4

1 に答える 1

1

あなたが示すコードにメモリリークはありません(不適切に実装されたデストラクタがない限りCEnergymulti)しかし、最初から動的に割り当てられたオブジェクトを使用する説得力のある理由はありません。単純に使用しない理由:

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

不要なものを削除するnewdelete、手動でメモリを管理する必要がなくなります。

于 2013-03-30T05:54:18.670 に答える