このようにループでメモリを割り当てている場合
for(file = 0; file < nfile; file++){
...
...
...
for(yy = 0; yy < ngridy; yy++){
for(xx = 0; xx < ngridx; xx++) {
tmparr1[xx+(ngridx*yy)] = (double *)calloc(nptperf[file], sizeof(double));
tmparr2[xx+(ngridx*yy)] = (double *)calloc(nptperf[file], sizeof(double));
}
}
しばらくして、コードの後半で、次のようにメモリを解放しています。
for(yy = 0; yy < ngridy; yy++){
for(xx = 0; xx < ngridx; xx++) {
free(tmparr1[xx+(ngridx*yy)]);
free(tmparr2[xx+(ngridx*yy)]);
}
}
free()
メモリを解放せず、その結果、より多くのメモリが割り当てられる可能性はありますか?file
ループごとに1回メモリを割り当てて解放しています。また、nptperf[file]
通常は約1〜300万ポイント、そしてngridx = ngridy = 100
。
このプログラムはngridx = ngridy = 80
以下で動作しますが、で失敗し100
ます。