使用操作符删除动态但仍然存在的内存泄漏
using operator delete an dynamic but still memory leak
我编写了一个代码来计算地图中一个区域的平均温度。
开始时,initial()
将被调用,然后loadtempdata()
,然后averagetemp()
,最后cleanup()
。
我已经使用一个全局指针指向一个堆动态数组的函数,以便它可以在其他函数中使用。最后,我使用delete[] table
来回收内存,但结果表明我仍然有内存泄漏,我已经发现了很长时间,找不到原因。
为什么还有内存泄漏?
谢谢。
#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;
}
}
有了你的前提条件,我能想到的内存泄漏的唯一原因是:多次调用LoadTempData
。您应该在LoadTempData
函数的开头添加以下代码:
if (table != 0)
Cleanup();
否则两次调用LoadTempData
将导致第一个数据指针被简单地覆盖,而不是实际地释放它。
是否有机会在Cleanup()被调用之前,您或判断系统调用LoadTempData不止一次?
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么以下C++代码中存在内存泄漏?
- 以下代码是否存在内存泄漏?
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- gpc服务器不会释放内存,是否存在内存泄漏?
- 存在内存泄漏问题的链接列表
- QT图像查看器示例,可能存在内存泄漏
- 为什么堆栈中的函数局部变量之间存在内存空间
- C :当居民记忆缓慢增加时,是否存在内存泄漏
- 是否存在内存泄漏,如果是,为什么?
- 如果函数返回 std::vector<std::string>,是否存在内存泄漏?
- 检测到指针引用可能存在内存泄漏
- 是否可能存在内存泄漏以在堆上分配shared_ptr
- 在这个关于指针的C++代码示例中是否存在内存泄漏
- 是否存在内存泄漏
- 尽管释放了分配的内存,但仍存在内存泄漏
- 复制构造函数中存在内存泄漏
- 优先级队列中可能存在内存泄漏
- C++中非常大的数组存在内存问题
- 如果我将一个POD结构分配给另一个POD组织,是否存在内存泄漏