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

时间:2015-08-21 17:25:58

标签: c++

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

这是我的代码:

0°     matrix(  0,  0,   0,  0, 0, 0)
45°    matrix( .7, .7, -.7, .7, 0, 0)
90°    matrix(  0,  1,  -1,  0, 0, 0)
180°   matrix( -1,  0,   0, -1, 0, 0)
270°   matrix(  0, -1,   1,  0, 0, 0)

1 个答案:

答案 0 :(得分:4)

您的矢量是局部变量。它存在于函数中,并在函数结束时被销毁。

因此,您的参考是晃来晃去。它指的是一个不再存在的对象。

只是按价值回归;你的编译器足够智能,可以优化掉无意义的副本,即使你是C ++ 11之前的版本,因此没有移动语义。