Re: Crash in erasing element of a list.
Heinz Ozwirk wrote:
"red floyd" <no.spam@here.dude> schrieb im Newsbeitrag
news:%Twsg.129149$dW3.113007@newssvr21.news.prodigy.com...
mahajan.vibhor@gmail.com wrote:
I have a list of pointers. e.g
A* a = new A(); // A is a class
stl::list<A*> list_a;
I am inserting object of class in the after allocating memeory thru new
operator.
But when i want to erase all elements from the list. my progam crashes.
I delete element by using a iterator.
A * temp = NULL;
stl::list<A*>::iterator Iter,
stl::list<A*>::iterator IterTemp;
for( Iter = list_a.begin() ; Iter != list_a.end() ; ){
Iter = list_a.begin();
temp = *Iter;
IterTemp = Iter;
Iter++;
list_a.erase(IterTemp);
delete temp;
}
At erase line my program crashes and debugger shows some exception in
erase function.
First of all, it should be std::list, not stl::list.
Second, rewrite your delete loop as follows:
for (iter = list_a.begin(); iter != list_a.end ; )
{
delete (*iter);
iter = list_a.erase(iter);
Or perhaps even better:
list_a.erase(iter++);
This will work for all STL containers, not just those where erase
returns an iterator to the next element.
Depends what you mean by "work". I wouldn't recommend that for a vector.
Mark