【发布时间】:2016-10-21 22:37:26
【问题描述】:
我正在将一个双精度向量转换为一个双精度数组,如 here 所示:
不同的是,我想将指针 a 作为函数参数返回:
void getArray(double* a)
{
std::vector<double> v;
a = &v[0];
}
所以我的问题是,a 的内存何时被释放?还是我必须自己打电话给delete[] a,这看起来很奇怪,因为我没有用new分配内存。我已经阅读了上述答案的 cmets,但我仍然不清楚。
【问题讨论】:
-
a将指向垃圾,一旦v超出范围,则没有可删除的内容 -
函数一返回,
a的内存就会被释放,因为a是一个指向向量元素的指针,而“v”是函数的局部变量。 -
另外,在 UB 旁边,从 c++11 开始,不那么骇人听闻的版本是
v.data()而不是&v[0],请参阅 stackoverflow.com/a/10740171/104774 -
“我正在将一个双精度向量转换为一个双精度数组” - 为什么?
-
无论如何,忘记
getArray函数,只需在程序中使用向量并在不能使用向量的地方(例如C接口)使用v.data(),确保使用的数据在向量的时间线,这在您的示例中并非如此,正如 Andrew 的回答中已经提到的那样。
标签: c++ arrays pointers vector