"二维的傅里叶变换"遇到“access violation”及“栈溢出”应该怎么调

qq_31273089 2016-11-19 08:29:55
如以下代码,求解决
#include <iostream>
#include <fstream>
#include <cmath>
const double pi=3.1415926;
using namespace std;
const int p=8;
const int n=1<<p;
const int m=n;
typedef struct//c语言的写法,尽量用堆空间,不要用栈
{
double r; //real
double i; //image
}complex;//定义一个复数类,有两个元素
void ZeroArray(complex c[n][n])//对复数数组进行初始化
{
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
c[i][j].r=0;
c[i][j].i=0;
}
}
}
void Fourier(const double f[n][n],complex g[n][n])//不能把第二维或者更高维的大小省略
{
/*const double c=1/sqrt((double)n);//没有sqrt(int),只有sqrt(float),
//sqrt(double),返回值固定是double
const double d=1/sqrt((double)m);*/
const double c=1/n;
for(int k=0;k<=n;k++)
{
const double qk=2*pi*k/n;
for(int l=0;l<=n;l++)
{
const double ql=2*pi*l/m;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
g[k][l].r+=cos(qk*i+ql*j)*f[k][l];
g[k][l].i+=-sin(qk*i+ql*j)*f[k][l];
}
}
g[k][l].r*=c;
g[k][l].i*=c;
}
}
}
int main()
{
//将1对应的二进制数左移p位 N=2^p
cout<<"n="<<n<<endl;
//system("pause");
static double f1[n][n];//,f2[n];
for(int i=0;i<=n;i++)
{
const double x=2*pi*i/n;
for(int j=0;i<=n;j++)
{
const double y=2*pi*j/n;
f1[i][j]=sin(5*x+7*y);
}
}//先求f,再求g,。。。。。。。。。。。。。。。
static complex g1[n][n];
ZeroArray(g1);
Fourier(f1,g1);
ofstream out1("data1.dat");
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
out1<<"\t"<<f1[i][j];
}
out1<<endl;
}
out1.close();
/*ofstream out2("data2.dat");
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
out2<<"\t"<<g1[i][j].r;
}
out2<<endl;
}
out2.close();
ofstream out3("data3.dat");
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
out3<<"\t"<<g1[i][j].i;
}
out3<<endl;
}
out3.close();*/
system("pause");
return 0;
}
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-11-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 版主 2016-11-19
  • 打赏
  • 举报
回复
for(int j=0;i<=n;j++) 改成 for(int j=0;j<=n;j++)
srhouyu 2016-11-19
  • 打赏
  • 举报
回复
59行,j写成i了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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