【发布时间】:2019-03-09 20:57:42
【问题描述】:
我正在使用 c++ (11) 开发一个项目,并且在从函数返回向量时遇到了一些问题。我的问题的一个最小工作示例如下:
#include <iostream>
#include <vector>
using namespace std;
vector<int*> find_items()
{
vector<int*> items;
int a[2] = {1,2};
items.push_back(a);
cout << items.at(0)[0] << endl;
return items;
}
int main()
{
vector<int*> items = find_items();
cout << items.at(0)[0] << endl;
return 0;
}
我希望能够为我的项目使用大小为 2 的数组向量,因此我使用指向这些数组的第一个元素的指针向量。这似乎工作正常,除非我需要从函数返回这样的向量。
在这段代码中,从我幼稚的角度来看,我应该在两个 cout 上得到相同的输出,但第二个打印似乎是一个垃圾数字。
我读过当函数返回一个向量时,c++ 会返回一个向量的副本。但是在那种情况下,不会在向量的副本中创建指向同一内存的新指针吗?我的猜测是这些新指针实际上指向了错误的位置。这个副本不够深,还是类似的东西?在这种情况下返回向量的正确方法是什么?
非常感谢您的帮助!
【问题讨论】:
-
您的代码遇到了未定义行为。您将局部变量地址存储到向量中。如果
find_items()函数返回,这些将不再有效。