如何在C ++中返回向量指针?

时间:2018-10-20 16:46:03

标签: c++ pointers return dynamic-memory-allocation

我正在尝试从函数返回指向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是我要返回指针的本地向量的名称。它们都不起作用,返回的向量始终为空。任何提示将不胜感激,但请记住,调用此函数的程序必须能够管理内存中的向量。换句话说,返回矢量对象不是可行的解决方案。谢谢!

1 个答案:

答案 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;
}