在函数中定义动态数组,然后返回数组元素。如何释放阵列的内存?

时间:2014-10-25 02:07:54

标签: c++ dynamic-arrays

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

我在Fibonacci中定义了一个动态数组。我想在函数main中删除它。为什么我无法删除它? 我试图解决这个错误,但我失败了。

1 个答案:

答案 0 :(得分:1)

您已经分配了一个大小为1的数组,但是     (* p)p [0] = 0;     (* p)p [1] = 1;

你在数组末尾写作。你破坏了某些东西,它可能是你自由的阵列堆信息。我不能重现确切的问题,但是非常接近。添加保护以确保(* p)[x]仅分配给x时

它没有给出正确的结果,但这不是主要的问题。