我的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
一个将被打印出来。
有谁能告诉我为什么会这样?
答案 0 :(得分:1)
执行此操作时:
mylist.push_back(&temp_p);
您正在向量中存储指向局部变量的指针。当函数返回时,它指向的对象不再存在,因此你的向量留有一个悬空指针。这会导致 undefined behviour 。
答案 1 :(得分:1)
在main函数中尝试引用add()函数返回时删除的对象。 另一个对象工作正常,因为当您使用“new”运算符时,您为该对象显式分配内存,并且在函数完成后它不会自动解析。 根据您要实现的目标,您应该自己为temp_p分配内存(使用new运算符)或将其创建为全局对象。