我正在尝试从函数返回指向std::vector
的指针,如下所示:
std::vector<int>* find_solution(const std::vector<int>& list)
我尝试了以下解决方案:
const std::vector<int>* find_solution(const std::vector<int>& list)
和
vector<int>* find_solution(const std::vector<int>& list)
{
//populate solution_list
std::vector<int>* return_list = new std::vector<int>;
return_list = &solution_list;
}
其中solution_list
是我要返回指针的本地向量的名称。它们都不起作用,返回的向量始终为空。任何提示将不胜感激,但请记住,调用此函数的程序必须能够管理内存中的向量。换句话说,返回矢量对象不是可行的解决方案。谢谢!
答案 0 :(得分:0)
vector<int>* find_solution(const std::vector<int>& list) { //populate solution_list std::vector<int>* return_list = new std::vector<int>; return_list = &solution_list; }
您必须使用分配的向量:
vector<int>* find_solution(const std::vector<int>& list)
{
std::vector<int>* solution_list = new std::vector<int>;
//populate solution_list
return solution_list;
}
在return_list = &solution_list;
时,您将覆盖指向已分配内存的唯一指针,因此永远无法将其释放。另外,您将返回函数结束时消失的局部变量的地址。
但是您不必一开始就动态分配std::vector<int>
,因为它仅包含几个size_t
和一个指向数据的指针。只是:
vector<int> find_solution(const std::vector<int>& list)
{
std::vector<int> solution_list;
//populate solution_list
return solution_list;
}