Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+;中的函数返回指向数组的指针+;? 我是一个初学者,我有一个问题,它返回一个指针,指向C++中的双倍数组。该函数接受两个数组,并将每个元素相加,就像向量和一样_C++_Arrays_Function_Pointers_Return - Fatal编程技术网

从C+;中的函数返回指向数组的指针+;? 我是一个初学者,我有一个问题,它返回一个指针,指向C++中的双倍数组。该函数接受两个数组,并将每个元素相加,就像向量和一样

从C+;中的函数返回指向数组的指针+;? 我是一个初学者,我有一个问题,它返回一个指针,指向C++中的双倍数组。该函数接受两个数组,并将每个元素相加,就像向量和一样,c++,arrays,function,pointers,return,C++,Arrays,Function,Pointers,Return,我认为正确的方法是 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; } 我的问题是内存泄漏怎么办?每次使用“myfunction”(在while循环内)时,我都会为变量“s”保留内存,这意味着如果while循环执行5次,那么程序会为变量“s”保留5倍的内存 有

我认为正确的方法是

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;
}
我的问题是内存泄漏怎么办?每次使用“myfunction”(在while循环内)时,我都会为变量“s”保留内存,这意味着如果while循环执行5次,那么程序会为变量“s”保留5倍的内存

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


高级版谢谢。

为了避免内存泄漏,您需要在获得它后立即使用
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;

    }

我认为编写
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;
}
std::vector myfunction(双*x,双*y,整数n){
std::向量r;
r、 储备(n);
对于(int i=0;i你问:

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

答案是肯定的

你还问:

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

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

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

    // Use s

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

与必须处理
new
delete
相比,更好的解决方案是从
myfunction
返回
std::vector
。这样,您就不必担心内存管理问题了。这就是
std::unique(myfunction(x,y,2));
,但老实说,我会用这个代码中所有动态分配的get go中的
std::vector
来获取所有动态分配。是不是
x={1,1}
有效语法?@WhozCraig应该是
std::unique\u ptr
?@宋元耀,可能。刚吃完晚餐,给一个相当大的margarita=P
while (/* some condition*/) {
    std::vector<double> s = myfunction(x, y, 2);
    // whatever
}
  while( /*some condition */){
    s = myfunction(x,y, 2);

    // Use s

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