使用网上的fft函数内存溢出怎么办?

在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,越界了。