带有指针的STL列表
STL List with pointers
我写这段代码是为了尝试理解其他一些更大的代码中的一个更大的问题,但是在main中的列表的第二次迭代中打印垃圾,我不太明白这里发生了什么。诚然,我倾向于打破指示,但在这里我看起来很直接,有人有什么见解吗?
std::list<int *> myobjects;
const std::list<int *>& getMYObjects( void );
const std::list<int *>&
getMYObjects( void )
{
return( myobjects );
}
void fillMYObjects()
{
int myints[]={15,36,7,17,20,39,4,1};
for(int i=0;i<8;i++)
{
int *temp = &myints[i];
myobjects.push_back(temp);
std::cout << "list: " << *temp << std::endl;
std::cout << "list: " << temp << std::endl;
}
std::cout << "listBack: " << *myobjects.back() << std::endl;
for(std::list<int*>::iterator it=myobjects.begin(); it!=myobjects.end();++it)
{
std::cout << ' ' << **it << std::endl;
}
}
int main()
{
fillMYObjects();
std::list<int*> myobjects2 = getMYObjects();
for(std::list<int*>::iterator it=myobjects2.begin(); it!=myobjects2.end();++it)
{
std::cout << ' ' << **it << std::endl;
}
}
变量myints
是一个局部变量,一旦函数返回,它将超出作用域。那么列表中的指针会发生什么变化呢?
您指向的是本地数字,因此位于堆栈上。当您离开函数时,它们在作用域之外失效。所以你仍然指向正确的地址,但是数据消失了,地址被用于其他东西。
在fillMyObject函数的末尾,myint数组被销毁,因为它是在函数内部声明的。在这个块的末尾,在函数的末尾,数组不再存在了,如果你想保留它的值,你需要存储值,而不是地址。它们在结束后就不再是正确的了;)
相关文章:
- 如何检查C ++ STL列表是否为回文?
- 清除 C++ 中的指针的 STL 列表
- 在Visual Studio 2013中编译的STL列表代码在Visual Studio 2019中给出了错误.想知道原
- 使用.txt文件填充 STL 列表不起作用
- 为 STL 列表编写选择排序
- 如何从 STL 列表中删除结构记录
- C++如何将 STL 列表传递给函数
- 漂亮的打印不适用于C ++ STL列表
- 在C++中,是否可以引用像C++中的stl列表这样的数据结构部分
- 如何根据STL列表中的元素数量分配内存
- 我怎么知道,如果我在 STL 列表中找到了我搜索的号码
- 打印列表列表C++ STL 列表
- 我们可以在穿越时插入STL列表吗?
- 使用 c++ 的 STL 列表 ..在传递列表指针的数组中
- 使用 C++11 迭代语法时从 STL 列表中删除
- 如何使用静态 stl 列表的迭代器
- 如何更改 stl 列表中项的值
- STL列表,删除所有奇数
- 如何将函数中的stl列表传递为C 中的参数
- 如何将结构添加到STL列表中