在VS2015上调用网上抄的fft代码,但是调试的时候报错:“0x002F4C89 处有未经处理的异常(在 ConsoleApplication1.exe 中): 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出。”
想问一问各位大佬,问题究竟在哪里。附上我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
using namespace std;
void fft(double x[],double y[],int n,int sign)
{
int i, j, k, l, m, n1, n2;
double c, c1, s, s1, e, t, tr, ti;
for (j = 1, i = 1; i < 16; i++)
{
m = i;
j = 2 * j;
if (j == n)break;
}
n1 = n - 1;
for (j = 0, i = 0; i < n1; i++)
{
if (i < j)
{
tr = x[j];
ti = y[j];
x[j] = x[i];
y[j] = y[i];
x[i] = tr;
y[i] = ti;
}
k = n / 2;
while (k < (j + 1))
{
j = j - k;
k = k / 2;
}
j = j + k;
}
n1 = 1;
for (l = 1; l <= m; l++)
{
n1 = 2 * n1;
n2 = n1 / 2;
e = 3.14159265359 / n2;
c = 1.0;
s = 0.0;
c1 = cos(e);
s1 = -sign*sin(e);
for (j = 0; j < n2; j++)
{
for (i = j; i < n; i += n1)
{
k = i + n2;
tr = c*x[k] - s*y[k];
ti = c*y[k] + s*x[k];
x[k] = x[i] - tr;
y[k] = y[i] - ti;
x[i] = x[i] + tr;
y[i] = y[i] + ti;
}
t = c;
c = c*c1 - s*s1;
s = t*s1 + s*c1;
}
}
if (sign == -1)
{
for (i = 0; i < n; i++)
{
x[i] /= n;
y[i] /= n;
}
}
}
void main()
{
double x[5] = { 12,32,12,32,12 };
double y[5] = { 0,0,0,0,0 };
fft(x, y, 8, 1);
for (int i = 0; i < 5; i++)
{
cout << x[i] << " + " << y[i] << endl;
}
}
如果我不调用fft函数,那么编译通过,说明fft程序本身是没有问题的;那么请问这个问题出在哪里呢?该怎么修改代码,才可以编译通过?
double x[5] = { 12,32,12,32,12 };
double y[5] = { 0,0,0,0,0 };
fft(x, y, 8, 1);
你的数组长度是5,为什么参数传8,越界了。