typedef list<int *> IntPtrList; IntPtrList int_list; for(int i=0; i < 5; i++)
{
int *pInt = new int;
int_list.push_back(pInt);
} IntPtrList::iterator Iter;
for(Iter = int_list.begin(); Iter != int_list.end(); Iter++)
{
int *pInt = (*Iter);
int_list.erase(Iter);
delete pInt;
pInt = NULL;
} getch();这种写法有野指针.
{
int *pInt = new int;
int_list.push_back(pInt);
} IntPtrList::iterator Iter;
for(Iter = int_list.begin(); Iter != int_list.end(); Iter++)
{
int *pInt = (*Iter);
int_list.erase(Iter);
delete pInt;
pInt = NULL;
} getch();这种写法有野指针.
for(Iter = int_list.begin(); Iter != int_list.end(); Iter++)
{
int *pInt = (*Iter);
int_list.erase(Iter);
delete pInt;
pInt = NULL;
}
----------------------------------------------------------
erase导致迭代器失效.
如果是这样,直接List.clear();如果是要遍历队列的信息,可以不用erase(),在循环完成后调用clear()
用vector可以吗?
IntPtrList::iterator IterLast = int_list.end();
for(Iter = int_list.begin(); Iter != IterLast; )
{
int *pInt = (*Iter);
if(whattrue(pInt))
{
int_list.erase(Iter++);
delete pInt;
}
else
++Iter; }
试试看
IntPtrList int_list; for(int i=0; i < 5; i++)
{
int *pInt = new int;
int_list.push_back(pInt);
} IntPtrList::iterator Iter;
while(true)
{
Iter = int_list.begin();
int *pInt = reinterpret_cast<int*>(*Iter);
if( Iter == int_list.end() )
break; int_list.erase(Iter);
delete pInt;
pInt = NULL;
}