将向量传递给函数

时间:2013-10-12 15:49:10

标签: c++

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

vector<Person*> alist;
add(alist);
printDetail(alist);

然后,在另一个文件中,我将其称为function.cpp,在此文件中,我有以下方法:

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();
    }
}

当我运行此程序时,printDetail(mylist)方法中的add()会打印出两个结果而没有任何问题,但在main()中,只有firstname2一个将被打印出来。

有谁能告诉我为什么会这样?

2 个答案:

答案 0 :(得分:1)

执行此操作时:

mylist.push_back(&temp_p);

您正在向量中存储指向局部变量的指针。当函数返回时,它指向的对象不再存在,因此你的向量留有一个悬空指针。这会导致 undefined behviour

答案 1 :(得分:1)

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

相关问题