我用MFC编写了一段基于对话框的命令按钮,按钮按下后对数组数据进行处理的程序:
void CDprocess::Fft(double Xc[],double Xs[],int N, int Inv)
{
double M = log(N) / log(2) + 0.1;
int NV2 = N / 2;
int NM1 = N - 1;
int J = 1;
double Tc;
double Ts;
int k;
for(int I=1;I<=NM1;I++)
{
if(I<J)
{
Tc = Xc[J];
Ts = Xs[J];
Xc[J] = Xc[I];
Xs[J]= Xs[I];
Xc[I]= Tc;
Xs[I] = Ts;
}
k=NV2;
while(k<J)
{
J=J-k;
k=k/2;
}
J = J + k;
}
double Pi=3.14159265358579;
int LE,LE1,IP;
double Uc,Us,Wc,Ws,Uc1;
for(int L=1;L<=M;L++)
{
LE = 2 ^ L;
LE1 = LE / 2;
Uc = 1.0;
Us =0.0;
Wc = cos(Pi/LE1);
Ws = -sin(Pi/LE1);
if(Inv!=0)
{
Ws=-Ws;
}
for(J=1;J<=LE1;J++)
{
for(I=J;J<=N;I+=LE)
{
IP = I + LE1;
Tc = Xc[IP] * Uc - Xs[IP] * Us; //problem!!
Ts = Xs[IP] * Uc + Xc[IP] * Us;
Xc[IP]=Xc[I]-Tc;
Xs[IP]=Xs[I]-Ts;
Xc[I]=Xc[I]+Tc;
Xs[I]=Xs[I]+Ts;
}
Uc1 = Uc * Wc - Us * Ws;
Us = Us * Wc + Uc * Ws;
Uc = Uc1;
}
}
if(Inv!=0)
{
for(int I=1;I<=N;I++)
{
Xc[I] = Xc[I]/N;
Xs[I] = Xs[I]/N;
}
}
return;
}
在运行时,可以通过编译,但是对话框不知道为何消失。
另外在调试时,却出现Unhandled Exception in myfile.exe (NTDLL.DLL):0XC0000005:Access Violation!消息提示对话框,
此时光标停在:77F61769 Push esi 处。
另外在调试窗口出现:
Loaded 'ntdll.dll', no matching symbolic information found.
..................
The thread 0x5B8 has exited with code 1 (0x1).
First-chance exception in wave.exe: 0xC0000005: Access Violation.
First-chance exception in wave.exe (NTDLL.DLL): 0xC0000005: Access Violation.
请各位专家、朋友,帮个忙看一下错误的原因,应该如何改正!
谢谢!
void CDprocess::Fft(double Xc[],double Xs[],int N, int Inv)
{
double M = log(N) / log(2) + 0.1;
int NV2 = N / 2;
int NM1 = N - 1;
int J = 1;
double Tc;
double Ts;
int k;
for(int I=1;I<=NM1;I++)
{
if(I<J)
{
Tc = Xc[J];
Ts = Xs[J];
Xc[J] = Xc[I];
Xs[J]= Xs[I];
Xc[I]= Tc;
Xs[I] = Ts;
}
k=NV2;
while(k<J)
{
J=J-k;
k=k/2;
}
J = J + k;
}
double Pi=3.14159265358579;
int LE,LE1,IP;
double Uc,Us,Wc,Ws,Uc1;
for(int L=1;L<=M;L++)
{
LE = 2 ^ L;
LE1 = LE / 2;
Uc = 1.0;
Us =0.0;
Wc = cos(Pi/LE1);
Ws = -sin(Pi/LE1);
if(Inv!=0)
{
Ws=-Ws;
}
for(J=1;J<=LE1;J++)
{
for(I=J;J<=N;I+=LE)
{
IP = I + LE1;
Tc = Xc[IP] * Uc - Xs[IP] * Us; //problem!!
Ts = Xs[IP] * Uc + Xc[IP] * Us;
Xc[IP]=Xc[I]-Tc;
Xs[IP]=Xs[I]-Ts;
Xc[I]=Xc[I]+Tc;
Xs[I]=Xs[I]+Ts;
}
Uc1 = Uc * Wc - Us * Ws;
Us = Us * Wc + Uc * Ws;
Uc = Uc1;
}
}
if(Inv!=0)
{
for(int I=1;I<=N;I++)
{
Xc[I] = Xc[I]/N;
Xs[I] = Xs[I]/N;
}
}
return;
}
在运行时,可以通过编译,但是对话框不知道为何消失。
另外在调试时,却出现Unhandled Exception in myfile.exe (NTDLL.DLL):0XC0000005:Access Violation!消息提示对话框,
此时光标停在:77F61769 Push esi 处。
另外在调试窗口出现:
Loaded 'ntdll.dll', no matching symbolic information found.
..................
The thread 0x5B8 has exited with code 1 (0x1).
First-chance exception in wave.exe: 0xC0000005: Access Violation.
First-chance exception in wave.exe (NTDLL.DLL): 0xC0000005: Access Violation.
请各位专家、朋友,帮个忙看一下错误的原因,应该如何改正!
谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货