[Interest] QList and erase problem...

william.crocker at analog.com william.crocker at analog.com
Mon Sep 14 17:25:48 CEST 2015


On 09/14/2015 11:13 AM, Igor Mironchik wrote:
> 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?
>

Have you run under valgrind to see if it offers any leads.

> 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 at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest




More information about the Interest mailing list