c++ - 为什么 vector 返回会丢失一些值?

标签 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 有什么问题

最佳答案

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

返回的指针将悬挂一次array超出范围。取消引用该指针的行为将未定义。这就是您的程序行为异常的原因。

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

关于c++ - 为什么 vector 返回会丢失一些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738986/

相关文章:

c++ - vector 下标超出范围错误消息 3

c++ - 中断函数调用与普通函数调用

c++ - 如何在 TabCtrl 内的子对话框中将焦点设置到 CEdit?

c++ - 是否允许 std::string 的 end+1 迭代器?

c++ - 在 Eigen 中按列计算 lpNorm

C++ 字符串 vector

c++ - 如何在 C++ 中使用 pthread 将数据从一个线程传递到另一个正在运行的线程

c++ - 自己的自定义 vector 类。内存重新分配

c++ - 使用整数的最佳方法?

arrays - Rust向量(`Vec<T>`)与数组(`[T; n]`的性能