为什么向量返回会错过一些值?

时间:2016-01-12 08:42:23

标签: c++ vector

int main(int argc, char argv)
{
    int myarray[] = {1, 2, 3, 5};
    std::vector<int> array(myarray, myarray + 4);
    std::vector<int> *p = testvector(array);
    std::vector<int>::const_iterator it;
    for(it=p->begin(); it != p->end(); ++ it)
    {
        printf("%d ", *it);
    }
    return 0;
}

std::vector<int> *testvector(std::vector<int> array) 
{
    return &array;
}

以上是我的测试代码;有什么错误,它返回0 0 3 5而不是1 2 3 5

3 个答案:

答案 0 :(得分:3)

仔细看var directoryListView = new DirectoryListView({ collection: directory }) 。这是输入参数std::vector<int> *testvector(std::vector<int> array)深层复制

array超出范围后,返回的指针将悬空。取消引用该指针的行为将是未定义。这就是你的程序表现奇怪的原因。

有趣的是,如果您已将array作为参数编写(即通过引用传递),那么这将有效,因为您将返回指向{{中定义的向量的指针1}}!这段代码虽然非常脆弱。

答案 1 :(得分:0)

这样:

std::vector<int> *testvector(std::vector<int> array) 

应替换为:

std::vector<int> *testvector(std::vector<int>& array) 

Live Demo

但是,这不是一个真正的解决方案,因为您的示例没有意义。我认为你有一个X问题,而你只是张贴了Y问题。如果你发布真正的问题,它会更容易帮助你。

答案 2 :(得分:0)

更改

std::vector<int> *testvector(std::vector<int> array) 

std::vector<int> *testvector(std::vector<int>& array) // Note the &

否则数组被复制到一个局部变量,该变量在testvector()结束时被销毁,这使得返回的指针无效。