マップ内のエリア温度の平均を計算するコードを作成しました。
最初initial()
に が呼び出され、次にloadtempdata()
thenが呼び出されaveragetemp()
、finallyが呼び出されますcleanup()
。
そして、関数内のヒープ動的配列を指すグローバルポインターを使用して、他の関数で使用できるようにしました。最後に、 を使用しdelete[] table
てメモリをリサイクルしましたが、結果はまだメモリ リークがあることを示しており、長い間それを発見しており、理由を見つけることができません。
なぜまだメモリリークがあるのですか?
事前にThx。
#include<iostream>
namespace TEST
{
double *table = 0;
const double *mtx = 0;
int n = 0, m = 0;
void LoadTempData(const double* matrix_row_major, int M, int N){
table = new double [(M + 1) * (N + 1)];
mtx = matrix_row_major;
m = M;
n = N;
for(int i = 1; i < M + 1; i ++){
for(int j = 1; j < N + 1; j ++){
table[j + i * (N + 1)] = matrix_row_major[(j - 1) + (i - 1) * N]
+ table[j - 1 + i * (N + 1)]
+ table[j + (i - 1) * (N + 1)]
- table[j - 1 + (i - 1) * (N + 1)];
}
}
}
double RegionAvgTemp(int y1, int x1, int y2, int x2){
if(y1 == y2){
return (table[x2 + 1 + (y2 + 1) * (n + 1)]
- table[x2 + 1 + (y2 - 1 + 1) * (n + 1)]
- table[x1 - 1 + 1 + (y1 + 1) * (n + 1)]
+ table[x1 - 1 + 1 + (y1 - 1 + 1) * (n + 1)]) / (x2 - x1 + 1);
}
else if(x1 == x2){
return (table[x2 + 1 + (y2 + 1) * (n + 1)]
- table[x1 + 1 + (y1 - 1 + 1) * (n + 1)]
- table[x2 - 1 + 1 + (y2 + 1) * (n + 1)]
+ table[x1 - 1 + 1 + (y1 - 1 + 1) * (n + 1)]) / (y2 - y1 + 1);
}
else if ((y1 == y2) && (x1 == x2)){
return mtx[x1 + y1 * n];
}
else{
return (table[x2 + 1 + (y2 + 1) * (n + 1)]
+ table[x1 - 1 + 1 + (y1 - 1 + 1) * (n + 1)]
- table[x2 + 1 + (y1 - 1 + 1) * (n + 1)]
- table[x1 - 1 + 1 + (y2 + 1) * (n + 1)]) / ((y2 - y1 + 1) * (x2 - x1 + 1));
}
return 0;
}
void Init()
{
}
void Cleanup()
{
delete[] table;
}
}