希望是个弱智的问题!

徐蕴 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[]代替,结果一样!也几乎可以排除数组越界的情况。
编了一天程序,头晕眼花,这个问题更是弄的我头大,请教高手们这个问题可能会出在哪呢?
...全文
223 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
徐蕴 2001-01-09
  • 打赏
  • 举报
回复
是我犯了一些低级错误,输入文件弄错了,把一个256K的文件当成4M读入,肯定要出乱子的。唉,当始终是该别人程序,要完全读懂不太容易。不过感谢大家!
wuccc 2001-01-05
  • 打赏
  • 举报
回复
VC下什么错误,能不能把output窗口的内容贴出来。
徐蕴 2001-01-04
  • 打赏
  • 举报
回复
难道我又浪费了100分吗?:(
徐蕴 2001-01-04
  • 打赏
  • 举报
回复
我试了,好象还是不行,老样子!
vcmfc 2001-01-04
  • 打赏
  • 举报
回复
用这样试一下:if ((complexlist=(complexld*)malloc((length+1)*sizeof(complexld)+1))==NULL)
徐蕴 2001-01-04
  • 打赏
  • 举报
回复
多谢2位的热心!
但我已经试过将malloc和free该为new和delede
刚才我贴的是BC的源码,现在我把我修改后的VC代码贴上。
首先
typedef complex<long double> complexld;

int CArithmetic::fftchange1(COMPLEXMAP *q, int way, int number, int color, int length, int func)
{

int i,j;

complexld *complexlist;

COMPLEXMAP matrix=*q;


// if ((complexlist=(complexld*)malloc((length+1)*sizeof(complexld)))==NULL)
// return (1);
if ((complexlist=new complexld[length+1])==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];

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]=complexld(complexlist[j]);

}

else

{
// printf(" error in matrix define\n");

return(7);

}
// free(complexlist);

delete[length+1] complexlist;

return(0);

}
无我无人 2001-01-04
  • 打赏
  • 举报
回复
wuccc的解法应该是对的,但解释不对,原因以后再说。但我可以比较肯定地说:
sizeof(complex)一定不是4的倍数!
wuccc 2001-01-04
  • 打赏
  • 举报
回复
你的complexlist是怎样声明的?
我想是这样:
complexlist=(complex*)malloc((length+1)*sizeof(co...这句把complexlist
指向complex,系统应该认为是一个complex,而实际上是length+1个,所以释放时出错。
试试这样:
complexlist=(complex*)malloc 改为:complexlist=(complex*) new complex[length+1]
free 改为:delete [length+1]complex。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧