,迭代器是否不用删除
在线等,迭代器是否不用删除?
list< int * > UserResList;
int aa=10;
int*a=&aa;
int bb=10;
int*b=&bb;
UserResList.push_back(a);
UserResList.push_back(b);
list<int*>::iterator pUserRes;
pUserRes =UserResList.begin();
if (pUserRes !=UserResList.end())
{
delete (*pUserRes); // 删除就报错
}
大家帮忙看看
------解决方案--------------------
delete只删除new出来的堆上的变量!跟迭代器毫无关系。。你若不行,不用迭代器,直接delete(a)...一样的崩
------解决方案--------------------
delete与new是成对使用的,因此无需delete。
另:list< int * >改为list< int >更为精炼。
------解决方案--------------------
你的UserResList保存着两个栈上变量的地址。
*pUserRes得到的就是栈上变量的地址。
你对栈上变量使用delete,自然就报错了,这是一种错误的做法,至于VS2008下没有报错,那是偶然的。
你还是把C++语言基础和STL的用法好好再学一学吧。
list< int * > UserResList;
int aa=10;
int*a=&aa;
int bb=10;
int*b=&bb;
UserResList.push_back(a);
UserResList.push_back(b);
list<int*>::iterator pUserRes;
pUserRes =UserResList.begin();
if (pUserRes !=UserResList.end())
{
delete (*pUserRes); // 删除就报错
}
大家帮忙看看
------解决方案--------------------
delete只删除new出来的堆上的变量!跟迭代器毫无关系。。你若不行,不用迭代器,直接delete(a)...一样的崩
------解决方案--------------------
delete与new是成对使用的,因此无需delete。
另:list< int * >改为list< int >更为精炼。
------解决方案--------------------
你的UserResList保存着两个栈上变量的地址。
*pUserRes得到的就是栈上变量的地址。
你对栈上变量使用delete,自然就报错了,这是一种错误的做法,至于VS2008下没有报错,那是偶然的。
你还是把C++语言基础和STL的用法好好再学一学吧。