C++ 将向量传递给函数

C++ 将向量传递给函数,c++,C++,我的main()中有以下内容: 当我运行这个程序时,在add()方法中的printDetail(mylist)会毫无问题地打印出两个结果,但是在main()中,只会打印出firstname2一个 有人能告诉我为什么会发生这种情况吗?当您这样做时: mylist.push_back(&temp_p); 您正在向量中存储指向局部变量的指针。当函数返回时,它指向的对象将不存在,因此向量将留下一个悬空指针。这将导致未定义behviour。在主函数中,当add()函数返回时,试图引用已删除的对象

我的
main()
中有以下内容:

当我运行这个程序时,在
add()
方法中的
printDetail(mylist)
会毫无问题地打印出两个结果,但是在
main()
中,只会打印出
firstname2
一个

有人能告诉我为什么会发生这种情况吗?

当您这样做时:

mylist.push_back(&temp_p);

您正在向量中存储指向局部变量的指针。当函数返回时,它指向的对象将不存在,因此向量将留下一个悬空指针。这将导致未定义behviour。

在主函数中,当add()函数返回时,试图引用已删除的对象。 另一个对象工作正常,因为当您使用“new”操作符时,会显式地为该对象分配内存,并且在函数完成后不会自动解析。
根据您试图实现的目标,您应该自己为临时对象分配内存(使用新操作符)或将其创建为全局对象

你能告诉我这行应该写什么吗?我试图用不同的方式传递temp,*,等等,但都有错误。@Qin您无法以任何方式将
temp
的地址传递给向量,因为
temp
是函数的本地地址。你必须想出另一种方法来做你想做的事情。@Qin你最好不要在向量中存储指针,而是
Person
对象。这使得代码更干净、更安全。
void add(vector<Person*> &mylist)
{  
    Person temp_p("firstname1","lastname1",20);

    mylist.push_back(new Person("firstname2","lastname2",20));
    mylist.push_back(&temp_p);

    printDetail(mylist);
}

void printDetail(vector<Person*> mylist)
{
    for(int i=0;i<mylist.size();i++)
    {
        mylist[i]->display();
    }
}
mylist.push_back(&temp_p);