0

我有以下内容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打印出一个。

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

4

2 回答 2

1

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

于 2013-10-12T16:44:33.990 回答
1

当你这样做时:

mylist.push_back(&temp_p);

您在向量中存储一个指向局部变量的指针。当函数返回时,它指向的对象不再存在,所以你的向量留下了一个悬空指针。这会导致未定义的行为

于 2013-10-12T15:50:43.350 回答