Hi, it seems that problem not in the iterating and deletion from cantainer...
I wrote simple test app and everything is ok. But something here crashes my app and only in release mode, so I can't understand what is the problem... And ideas? 9/14/2015 6:06 PM, André Somers пишет: > Op 14-9-2015 om 16:57 schreef Igor Mironchik: >> Hi, >> >> I ran into this problem... >> >> void >> ImageFilesStoragePrivate::removeAllImages( >> QList< ImageRecord > & images, >> ImageFilesStorage::ImageType type ) >> { >> QList< ImageRecord >::Iterator it = images.begin(); >> QList< ImageRecord >::Iterator last = images.end(); >> >> while( it != last ) >> { >> if( (*it).m_type == type ) >> { >> LOG( DebugLogLevel, "Before real deletion" ) >> removeFromDatabase( it ); >> LOG( DebugLogLevel, "After real deletion" ) >> >> // it = images.erase( it ); // LOOK AT THIS LINE !!! If I >> uncomment it and comment next line - crash... >> ++it; >> >> LOG( DebugLogLevel, QString( "it == last : %1" ).arg( ( it >> == last ? "true" : "false" ) ) ) >> } >> else >> ++it; >> } >> } >> >> What is wrong? > A lot is wrong. > > First, you are not using standard algorithms to do standard things. I'd > say std::remove_if with std::erase would be a better way to solve the issue. > > Then in general, if you delete from the container, iterators are going > to be invalidated. Iterate backwards if you are going to delete items > from the container. > > Last: you probably don't want to use QList but QVector. > > André > > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest