こんにちは、不要なメモリを大量に消費するループを含む C++ プログラムをコーディングしているため、最後に到達する前にコンピューターがフリーズします...
このループは次のようになります。
float t = 0.20;
while(t<0.35){
CustomClass a(t);
a.runCalculations();
a.writeResultsInFile("results_" + t);
t += 0.001;
}
t
関連する場合、プログラムは、温度と呼ばれる外部パラメーターのいくつかの値の結果が必要な物理シミュレーションです。メモリの過剰は、クラスのインスタンスがループの1回の実行から次の実行までに使用するスペースを「解放」しないことが原因のnew
ようです。クラスのデストラクタでやってみましたが、役に立ちませんでした。私のクラスのメインメモリの使用が、そこに新しい命令で定義された2次元配列であるためでしょうか?
精度、上記のコードは問題ではないようです(これを指摘してくれた人に感謝します)のでCustomClass
、コンストラクターで( my の最大のオブジェクトによって)配列を開始する方法を次に示します。
tab = new int*[h];
for(int i=0; i<h; i++) {
tab[i] = new int[v];
for(int j=0; j<v; j++) {
tab[i][j] = bitd(gen)*2-1; //initializing randomly the lattice
}
}
bitd(gen)
1
またはを出力する乱数発生器0
です。
また、私のCustomClass
オブジェクトの別のメソッドは、次の方法で配列のサイズを 2 倍にします。
int ** temp = new int*[h];
for(int i=0; i<h; i++) {
temp[i] = new int[v];
for(int j=0; j<v; j++) {
temp[i][j] = tab[i/2][j/2];
}
}
delete[] tab;
tab = temp;
ポインターを解放する必要がある可能性はありますtemp
か?