我在程序中遇到堆损坏问题。在程序中,我正在读取一个数据块并对其执行 FFT 和 IFFT。我正在为 2 个图像(主从图像)做这件事。完全相同的代码适用于主服务器,但当我尝试删除从属缓冲区时,显示从属文件的堆损坏。
fcomplex 定义为:
typedef struct {float real, imag;}fcomplex;
附上相关部分代码片段:完整代码:http ://sharetext.org/7xXe
如果我不为从映像调用 fft 和 ifft 函数,则不会发生错误。(不过对主人来说一切都很好)
为了调试错误,我安装了应用程序验证程序,但我无法解码日志文件。它在这里:http ://sharetext.org/Y2ji (XML文件复制粘贴)
视觉工作室给出的错误是:检测到堆损坏:在 0x062C0040 的正常块 (#194456) 之后
CCoarseFun::fcomplex * slave_bfr;
CCoarseFun::fcomplex * slave_col;
slave_bfr = Pcoarse.init_1Dcmplx(SIZE*s_cols);
slave_col = Pcoarse.init_1Dcmplx(SIZE);
Pcoarse.cfft1d_(&SIZE,slave_col,&FFTdir); // This function causes a problem
Pcoarse.complex_mult_col(filter, slave_col, SIZE, slave_col)
Pcoarse.cfft1d_(&SIZE,slave_col,&FFTdir); // As does this one
// delete memory related to slave
delete [] slave_bfr; // Heap corruption here
delete [] slave_col;
令我困惑的是代码非常简单,而且它仅对主文件 100% 有效。为什么它会为奴隶崩溃?
有人可以指导我找到一个解决方案,或者一个关于如何使用应用程序验证器的教程吗?
谢谢, 肖纳克
编辑:使用 Win7 x64 - VS2010
编辑 2:init_1Dcmplx 的定义
CCoarseFun::fcomplex* CCoarseFun::init_1Dcmplx(int n)
{
fcomplex *a;
a=new fcomplex[n];
for(int i=0;i<n;i++)
{
a[i].real=float(0.0);
a[i].imag=float(0.0);
}
return a;
}
EDIT3:cfft1D_ 的代码:http ://sharetext.org/hzIg
EDIT4:mem.delfloat() 的代码
void CMemAlloc::del_float(float *a)
{
if (a!=NULL)
{
delete[] a;
a=NULL;
}
else
{
return;
}
}