プログラムでヒープ破損の問題が発生しています。プログラムでは、データのブロックを読み取り、それに FFT と IFFT を実行しています。マスターとスレーブの2つのイメージでやっています。まったく同じコードがマスターに対しては正常に機能しますが、スレーブ バッファーを削除しようとすると、スレーブ ファイルのヒープの破損が表示されます。
fcomplex は次のように定義されます。
typedef struct {float real, imag;}fcomplex;
コードの関連部分のスニペットが添付されています: 完全なコード: http://sharetext.org/7xXe
スレーブ イメージに対して fft および ifft 関数を呼び出さない場合、エラーは発生しません。(ただし、マスターにとってはすべて正常に機能します)
エラーをデバッグするためにアプリケーション検証ツールをインストールしましたが、ログ ファイルをデコードできませんでした。ここにあります: http://sharetext.org/Y2ji (XML ファイルのコピーを貼り付けたもの)
ビジュアル スタジオが与えるエラーは次のとおりです。
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_1Dcmlx の定義
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;
}
}