首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C++中的函数返回指向数组的指针?

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

Stack Overflow用户
提问于 2015-05-26 02:54:03
回答 3查看 151关注 0票数 2

我是一个初级程序员,我有一个关于函数的问题,这个函数返回一个指向C++中的双重数组的指针。该函数接受两个数组并将每个元素相加,就像向量之和一样。

我认为正确的方法是..。

代码语言:javascript
复制
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循环中使用了这个函数,如下所示

代码语言:javascript
复制
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倍的内存?

是否存在这样的方法(从函数返回指向数组的指针并在循环中使用该函数)?

谢谢你的进阶。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-26 03:01:23

我认为编写myfunction的更正确的方法是:

代码语言:javascript
复制
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循环可以是:

代码语言:javascript
复制
while (/* some condition*/) {
    std::vector<double> s = myfunction(x, y, 2);
    // whatever
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-26 02:58:28

为了避免内存泄漏,您需要在获得s后立即使用它,并在完成之后删除它。

代码语言:javascript
复制
 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;

    }
票数 4
EN

Stack Overflow用户

发布于 2015-05-26 03:15:19

你问:

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

答案是

你还问:

是否存在这样的方法(从函数返回指向数组的指针并在循环中使用该函数)?

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

代码语言:javascript
复制
  while( /*some condition */){
    s = myfunction(x,y, 2);

    // Use s

    // Now delete s.
    delete[] s;
  }

一个比处理newdelete更好的解决方案是从myfunction返回一个std::vector。那么,您就不需要担心内存的管理。那是the answer by Barray

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档