从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;
}