[DUG] Validating a TListItem exists

Todd todd.martin.nz at gmail.com
Wed Feb 2 10:47:20 NZDT 2011


You can lead a horse to water, but you can't make it drink.
>
> That assumes that your code hasn't in the meantime added another list 
> item to the list view and that the memory manager hasn't 
> coincidentally re-used the memory of a previously freed item when 
> allocating the memory for the new item ...
>
> Yes, this is going to be a rare occurrence... freakishly rare, if it 
> even happens at all.   But it *_could_* happen, and if/when it does it 
> will almost certainly be a Heisenbug... exhibiting some weird 
> behaviours but no crashes and virtually impossible to reliably reproduce.
>
> It's up to you... J
>
> *From:* delphi-bounces at delphi.org.nz 
> [mailto:delphi-bounces at delphi.org.nz] *On Behalf Of *Ross Levis
> *Sent:* Tuesday, 1 February 2011 18:45
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* Re: [DUG] Validating a TListItem exists
>
> ListView.Items.IndexOf() does the trick, so I'll do that in the meantime.
>
> Cheers.
>
> *From:* delphi-bounces at delphi.org.nz 
> [mailto:delphi-bounces at delphi.org.nz] *On Behalf Of *Jolyon Smith
> *Sent:* Tuesday, 1 February 2011 2:05 PM
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* Re: [DUG] Validating a TListItem exists
>
> If the original item has been Free'd, then it either:
>
> a) Points to nothing (literally, empty unused memory)
>
> or
>
> b) Points to something else entirely
>
> You might be extremely lucky and find that
>
> c) If points to nothing, but the memory previously used for the list 
> item is entirely or partially temporarily as yet unchanged
>
> Whatever you find in one particular case, possibly even in one 
> particular execution run of that one particular case, is not reliable 
> for every case or for every execution run.
>
> There are ways to do what you wish to do, but I am fairly certain that 
> every single one will involve more work and more risk than simply 
> assuming that /Anushka has already spilled the oil/, and consider a 
> deleted list item as lost and gone forever, even if it might not be.
>
> *From:* delphi-bounces at delphi.org.nz 
> [mailto:delphi-bounces at delphi.org.nz] *On Behalf Of *Ross Levis
> *Sent:* Tuesday, 1 February 2011 13:30
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* Re: [DUG] Validating a TListItem exists
>
> I was hoping to avoid that.  I was thinking there may be a way of 
> validating that it is still a TListItem the pointer is pointing to, 
> something like an "is" operation, but it looks like some work required 
> to avoid the issue completely.
>
> Cheers.
>
> *From:* delphi-bounces at delphi.org.nz 
> [mailto:delphi-bounces at delphi.org.nz] *On Behalf Of *Jolyon Smith
> *Sent:* Tuesday, 1 February 2011 10:59 AM
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* Re: [DUG] Validating a TListItem exists
>
> AFAIK when an item is deleted from a listview it is also free'd.  
> Unavoidably.
>
> If you have a reference to a list item that may have been deleted from 
> the list view, then any attempt to use that reference subsequent to 
> it's being deleted is likely to fall foul of an access violation (best 
> case: at least you would get an error to respond to) or be referencing 
> some other memory that is re-allocated and no longer actually 
> representing the list item it used to refer to (worst case: since this 
> would be lead to silent unexpected behaviours).
>
> I think the best you can do is add a handler to the 
> Listview.OnDeletion event and respond to the notifications you will 
> receive at the point at which any list items are actually deleted.
>
> *From:* delphi-bounces at delphi.org.nz 
> [mailto:delphi-bounces at delphi.org.nz] *On Behalf Of *Ross Levis
> *Sent:* Monday, 31 January 2011 16:24
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* [DUG] Validating a TListItem exists
>
> I'm storing some TListItem's in a TList.  Some of these items could be 
> removed from the listview at some stage.  I know the items should be 
> removed from the TList when removed from the listview, but don't ask.
>
> Is there a simple method to determine if a listitem reference is still 
> valid and exists, or do I need to use listview.items.indexof which 
> could be slow.
>
> Cheers.
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject: unsubscribe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20110202/03d9d272/attachment.html 


More information about the Delphi mailing list