double fibonacci(int n, double **p)
{
if(n == 0)
return n;
(*p) = new double[n];
memset(*p, 0, n);
(*p)[0] = 0;
(*p)[1] = 1;
for(int i = 2; i <= n; i++)
(*p)[i] = (*p)[i-1] + (*p)[i-2];
return (*p)[n];
}
int main()
{
double *p = NULL;
cout << fibonacci(1, &p) << endl;
delete []p;
}
输出为:
*** Error in `/home/tardis/codeblocks/test/bin/Debug/test': free(): invalid next
size (fast): 0x08932008 ***
Aborted (core dumped)
Process returned 134 (0x86) execution time : 0.185 s
我在斐波那契中定义了一个动态数组。我想在函数主中删除它。为什么我无法删除它?我试图修复此错误,但我失败了。
你被分配了一个大小为 1 的数组,但 (*p(p[0] = 0; (*p(p[1] = 1;
您正在数组的末尾之外写入。您正在损坏某些内容,它可能是您正在释放的数组的堆信息。我无法重现确切的问题,但非常接近。添加保护以确保 (*p([x] 仅在 x 时分配给
它没有给出正确的结果,但这不是ATM的主要问题。