希望是个弱智的问题!
徐蕴 2001-01-04 07:13:00 是这样的,我要把一些BC31的算法(主要是一些图象变换程序,比如傅立叶变换,反变换等等)程序移植到VC。
原以为比较简单,做一些封装,再给它加一个简单的界面而已。实际做起来发现并不是如此简单,第一在
BC31(或是TC30)有一个复数类,VC中没有与其等价的,我好不容易才找到一个复数类模板来勉强顶替。第二
点我就怎么也搞不定了,代码很长,我就仅仅摘录一段:
if ((complexlist=(complex*)malloc((length+1)*sizeof(complex)))==NULL) return (1);
if (way==0)
for (i=0; i<color; i++)
{
for (j=0; j<length; j++)
complexlist[j]=matrix[number][color*j+i];//matrix是这个函数传入的参数
if (func==1)
fft (complexlist, two(length)); // 很简单的函数
else if (func==0)
fftback(complexlist, two(length)); // 很简单的函数
for (j=0; j<length; j++)
matrix[number][color*j+i]=complexlist[j];
}
else
if (way==1)
for (i=0; i<color; i++)
{
for (j=0; j<length; j++)
complexlist[j]=matrix[j][color*number+i];
if (func==1)
fft(complexlist, two(length));
else
if (func==0)
fftback(complexlist, two(length));
for (j=0; j<length; j++)
matrix[j][color*number+i]=complex(complexlist[j]);
}
else
{
printf(" error in matrix define\n");
return(1);
}
free(complexlist);//出错!!!正常运行时出的错误信息是:"Damage:after normal block(#218) at ..."
//我跟踪到这里时程序不知何故跳入到一段汇编代码中,提示进入到用户设置的断点之中(int 3)
//我跟踪的是way=0的情况。
我怀疑是malloc和free的问题,于是用new 和delete[]代替,结果一样!也几乎可以排除数组越界的情况。
编了一天程序,头晕眼花,这个问题更是弄的我头大,请教高手们这个问题可能会出在哪呢?