从 C++ 中的函数返回指向数组的指针?

Posted

技术标签:

【中文标题】从 C++ 中的函数返回指向数组的指针?【英文标题】:Return a pointer to array from a function in C++? 【发布时间】:2015-08-07 13:05:17 【问题描述】:

我是一名初级程序员,我有一个关于在 C++ 中返回指向双精度数组指针的函数的问题。该函数采用两个数组并将每个元素相加,就像向量的总和一样。

我认为正确的做法是......

double *myfunction(double *x, double *y, int n)
  double *r = new double[n];
  for(int i=0;i<n;i++)
    r[i] = x[i]+y[i];
  
  return r;

问题是我在这样的主函数的while循环中使用该函数

int main()
  double *x, *y, *s;
  x = new double[2];
  y = new double[2];
  x = 1,1;
  y = 2,2;

  while(/*some condition */)
    /*some process...*/

    s = myfunction(x,y, 2);

    /*some process...*/
  

  delete[] x;
  delete[] y;
  delete[] s;

我的问题是内存泄漏怎么办?每次我使用“myfunction”(在while循环内)我为变量“s”保留内存,这意味着如果while循环执行5次,那么程序为变量“s”保留5倍的内存“?

有没有办法做到这一点(从函数返回指向数组的指针并在循环中使用该函数)??

先谢谢你了。

【问题讨论】:

std::unique_ptr&lt;double&gt; s(myfunction(x,y,2));,但老实说,我会从一开始就使用std::vector 来处理此代码中的所有动态分配。 x = 1, 1 的语法是否有效? @WhozCraig 应该是std::unique_ptr&lt;double[]&gt; @songyuanyao 是的,可能。刚吃完晚饭回来给了一杯大小适中的玛格丽塔酒=P 【参考方案1】:

你问:

每次我使用“myfunction”(在while循环中)时,我都会为变量“s”保留内存,这意味着如果while循环执行5次,那么程序会为变量“s”?

答案是是的

你还问过:

有没有办法做到这一点(从函数返回指向数组的指针并在循环中使用该函数)??

答案是是的。需要添加代码删除返回的内存,

  while( /*some condition */)
    s = myfunction(x,y, 2);

    // Use s

    // Now delete s.
    delete[] s;
  

比处理newdelete 更好的解决方案是从myfunction 返回std::vector。然后,您无需担心管理内存。那是the answer by Barray

【讨论】:

【参考方案2】:

我想说写myfunction 更正确的方式是:

std::vector<double> myfunction(double *x, double *y, int n)
  std::vector<double> r;
  r.reserve(n);
  for(int i=0;i<n;i++)
    r.push_back(x[i]+y[i]);
  
  return r;

这样,您不必担心内存泄漏,而您的 while 循环可以是:

while (/* some condition*/) 
    std::vector<double> s = myfunction(x, y, 2);
    // whatever

【讨论】:

【参考方案3】:

为避免内存泄漏,您需要在获取后立即使用s,并在完成后将其删除。

 int main()
      double *x, *y, *s;
      x = new double[2];
      y = new double[2];
      x = 1,1;
      y = 2,2;

      while(//some condition )
        s = myfunction(x,y, 2);
        //do some process here
        delete[] s;
      
      delete[] x;
      delete[] y;

    

【讨论】:

以上是关于从 C++ 中的函数返回指向数组的指针?的主要内容,如果未能解决你的问题,请参考以下文章

C++指针问题,请问如何定义一个返回值为结构体指针数组的函数?

如何使用 ctypes 将数组从 C++ 函数返回到 Python

从函数返回指向数组的指针,函数名称后具有数组维度

从指向函数指针数组的指针中存储返回值如何工作?

从函数 C++ 正确传递指针

函数指针返回具有局部性的 C++ 中的另一个函数指针