从c++函数返回指向数组的指针
Return a pointer to array from a function in C++?
我是一名初级程序员,我有一个关于在c++中返回双精度数组指针的函数的问题。该函数接受两个数组,并将每个元素相加,就像vector和一样。
我认为正确的做法是....
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倍的内存?
是否有一种方法可以做到这一点(从函数返回指向数组的指针并在循环中使用该函数)??
提前谢谢。
为了避免内存泄漏,您需要在获得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;
}
这样,你就不必担心内存泄漏,你的while循环可以只是:
while (/* some condition*/) {
std::vector<double> s = myfunction(x, y, 2);
// whatever
}
你问:
每次我使用"myfunction"(在while-loop内)时,我为变量"s"保留内存,这意味着如果while-loop执行5次,那么程序为变量"s"保留5倍的内存?
答案是是
你还问:
是否有一种方法可以做到这一点(从函数返回指向数组的指针并在循环中使用该函数)??
答案是是。您需要添加代码来删除返回的内存,
while( /*some condition */){
s = myfunction(x,y, 2);
// Use s
// Now delete s.
delete[] s;
}
一个比必须处理new
和delete
更好的解决方案是从myfunction
返回std::vector
。然后,您就不需要担心内存的管理。这就是Barray的答案
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”