Sign in to follow this  
reaperrar

[Resolved] std::list clear() - Unhandled Exception

Recommended Posts

What are some common causes for unhandled exceptions from a std::list's Clear() call? Given...

 

*The list does not contain pointers, the resource is never released manually e.g std::list<int>

 

*It breaks here (inside list)

 #if _ITERATOR_DEBUG_LEVEL == 2
	void _Orphan_ptr(_Myt& _Cont, _Nodeptr _Ptr) const
		{	// orphan iterators with specified node pointers
		_Lockit _Lock(_LOCK_DEBUG);
		const_iterator **_Pnext = (const_iterator **)_Cont._Getpfirst();
		if (_Pnext != 0)
			while (*_Pnext != 0)
				if ((*_Pnext)->_Ptr == this->_Myhead
					|| _Ptr != 0 && (*_Pnext)->_Ptr != _Ptr) //!!BREAKS HERE - On second pass through loop (while (*_Pnext != 0)) )
					_Pnext = (const_iterator **)(*_Pnext)->_Getpnext();
				else
					{	// orphan the iterator
					(*_Pnext)->_Clrcont();
					*_Pnext = *(const_iterator **)(*_Pnext)->_Getpnext();
					}
		}
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
Edited by reaperrar

Share this post


Link to post
Share on other sites

Invoking undefined behavior earlier in the program?

Without seeing your own code, it's hard to say. std::list<int>::clear() should only crash if you've already ruined your program's state. You're likely doing something earlier in your program that is corrupting your memory. Perhaps accessing invalid or deleted memory, or double deleting something.

Share this post


Link to post
Share on other sites

Usually the first thing I try when I get an "impossible" crash is to Rebuild Entire Project (takes my project only 5-10 minutes, so it's not as bad as some other projects with multi-hour build times). The reason? I can't count the number of times that a change made to some part of the project somehow affected other unrelated parts of the project simply because the generated object files somehow didn't properly line up. No, it (surprisingly) wasn't a mistake on my end, no there wasn't corrupt memory, and no the two portions of the project weren't even aware of each others' existence.

 

Once a proper Rebuild Entire Project completes, if something is still going wrong, even if it seems "impossible", then it's obviously my fault - that's when I start really cracking down with the debugger. (Though obviously I am using the debugger before calling something 'impossible' and doing the complete rebuild, but at this point I start checking everything that seems evenly remotely related to the problem area).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this