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

why does vector return miss some value?

本文关键字:错过 返回 为什么      更新时间:2023-10-16
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 有什么问题

仔细看std::vector<int> *testvector(std::vector<int> array)。这是对输入参数array进行深层复制

返回的指针将在超出范围后悬array。取消引用该指针的行为将是未定义的。这就是为什么你的程序行为奇怪。

有趣的是,如果您将std::vector<int>& array编写为参数(即通过引用传递(,那么这将起作用,因为您将返回指向 main 中定义的向量的指针!不过,这段代码会非常脆弱。

这个:

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

应替换为:

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

现场演示

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

更改

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

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

否则,数组将复制到局部变量,该变量在testvector()结束时销毁,从而使返回的指针无效。