Comparing invalid iterators results in an assert failure in STL build.
We might also change wxList::compatibility_iterator::operator==() to allow
comparing invalid iterators (which should be different from all the other ones
but what about comparing two invalid iterators?) but it would probably be
better to get rid of all uses of compatibility_iterator in the code instead in
the long term.
Closes #12730.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66287
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
while (node)
{
wxList::compatibility_iterator next = node->GetNext();
while (node)
{
wxList::compatibility_iterator next = node->GetNext();
- delete (wxCommand *)node->GetData();
- m_commands.Erase(node);
// Make sure m_lastSavedCommand won't point to freed memory
// Make sure m_lastSavedCommand won't point to freed memory
- if ( m_lastSavedCommand == node )
+ if ( m_lastSavedCommand && m_lastSavedCommand == node )
m_lastSavedCommand = wxList::compatibility_iterator();
m_lastSavedCommand = wxList::compatibility_iterator();
+ delete (wxCommand *)node->GetData();
+ m_commands.Erase(node);
+
if ( (int)m_commands.GetCount() == m_maxNoCommands )
{
wxList::compatibility_iterator firstNode = m_commands.GetFirst();
if ( (int)m_commands.GetCount() == m_maxNoCommands )
{
wxList::compatibility_iterator firstNode = m_commands.GetFirst();
- wxCommand *firstCommand = (wxCommand *)firstNode->GetData();
- delete firstCommand;
- m_commands.Erase(firstNode);
// Make sure m_lastSavedCommand won't point to freed memory
// Make sure m_lastSavedCommand won't point to freed memory
- if ( m_lastSavedCommand == firstNode )
+ if ( m_lastSavedCommand && m_lastSavedCommand == firstNode )
m_lastSavedCommand = wxList::compatibility_iterator();
m_lastSavedCommand = wxList::compatibility_iterator();
+
+ wxCommand *firstCommand = (wxCommand *)firstNode->GetData();
+ delete firstCommand;
+ m_commands.Erase(firstNode);
}
m_commands.Append(command);
}
m_commands.Append(command);