通过引用返回 std::vector 导致分段错误

Kar*_*rus 0 c++

我有一个函数可以创建一个非常大的 std::vector。返回此向量时,由于其大小,我不想再次复制它。因此,我想返回对该向量的引用。但是,这样做会给我一个分段错误。为什么是这样?解决办法是什么?

这是我的代码:

std::vector<int>& Foo()
{
    std::vector<int> x(100000, 50);
    return x;
}

int main()
{
    std::vector<int> y = Foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 6

你的向量是一个局部变量。它存在于函数中,并在函数结束时销毁。

因此,您的参考是悬而未决的。它指的是不再存在的对象。

只需按值返回;您的编译器足够聪明,可以优化掉无意义的副本,即使您是 C++11 之前的版本,因此没有移动语义。