递归fft计算中的分段错误
segmentation fault on recursive fft computation
我使用dif-radix-2算法对复向量执行fft。我递归地将我的输入分为两组,第一组和第二组,然后对第一半和第二部分执行复杂的加法*旋转因子。
函数完成了,但当我试图输出结果向量时,我收到了一个Segmentation错误。怎么了?
int main(int argc, char *argv[]){
int n = 8;
complex<double> *x = new complex<double>[n];
// Test data
x[0] = sin(M_PI/2);
x[1] = sin(0);
x[2] = sin(0);
x[3] = sin(0);
x[4] = sin(0);
x[5] = sin(0);
x[6] = sin(0);
x[7] = sin(0);
for(int i = 0; i<n; i++){
cout << x[i] << endl;
}
fft(x,n);
cout << endl;
for(int i = 0; i<n; i++){
cout << x[i] << endl;
}
}
void fft(complex<double> *X, int N){
if(N < 1){return;}
double w = 2 * M_PI / (N/2);
for(int i = 0; i<N/2; i++){
double ang = w * i;
complex<double> tw(cos(ang),sin(ang)); // twiddle factor
complex<double> first_half = X[i];
complex<double> second_half = X[i+N/2];
X[i] = first_half+second_half;
X[i+N/2] = (first_half-second_half) * tw;
cout << X[i] << " " <<X[i+N/2] << endl;;
}
fft(X,N-1);
fft(X+N/2,N-1);
}
fft(X+N/2,N-1);
这将是越界的;阵列的第二半部分的大小仅为CCD_ 1。我的傅立叶理论有点生疏,但我想你想要
fft(X, N/2);
fft(X+N/2, N/2);
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?