注意:最初我认为一段代码导致了泄漏,但事实证明这是不正确的。因此下面的评论。我已经更新了问题
可能的解决方案:我设法解决了这个问题。我所做的是将所有初始化移动到函数的头部。当我遇到相应的删除代码时,将它们列在一张纸上并刮掉它们。这样 1. 我没有遗漏任何删除 2. 确保我没有在循环内初始化任何内容 管理以消除除了几个字节之外的所有泄漏。更新代码:http ://sharetext.org/gPJf 您可以在下面找到“之前”代码:
我面临错误的功能是这个: http ://sharetext.org/3gq0
从我收集的评论中,初始化和删除可能不正确。这是负责品尝的代码
float** CMemAlloc::init_2Dfloat(int rows,int cols)
{
float **a;
a=new float*[rows];
for(int j=0;j<rows;j++)
a[j]=new float[cols];
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
a[i][j]=0.0;
return a;
}
void CMemAlloc::del_float(float **a,int rows)
{
if(a!=NULL)
{
for (int i = 0; i <rows; i++) {
delete[] a[i];
a[i] = NULL;
}
delete[] a;
a=NULL;
}
else
{
return;
}
}
我怀疑这个功能对出现故障:
CCoarseFun::window** CCoarseFun::init_2Dwin(int rows,int cols)
{
window** a;
a=new window*[rows];
for(int j=0;j<rows;j++)
a[j]=new window[cols];
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
a[i][j].line_high=0;
a[i][j].line_low=0;
a[i][j].pixel_high=0;
a[i][j].pixel_low=0;
}
}
return a;
}
void CCoarseFun::del_win(window ** a, int rows)
{
for(int i=0;i<rows;i++)
{
delete [] a[i];
a[i] = NULL;
}
delete[] a;
a=NULL;
}
这里会不会有错误?
注意:我已经在各个点放置了跟踪语句,并且正在打印“块”的地址。这是输出:http ://sharetext.org/ODSv
我目前正在尝试的是从内部循环中删除所有初始化。