how to debug memory errors
Lodovico Giaretta via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Nov 8 00:38:36 PST 2016
On Tuesday, 8 November 2016 at 07:39:12 UTC, Era Scarecrow wrote:
> On Tuesday, 8 November 2016 at 06:04:59 UTC, thedeemon wrote:
>> On Tuesday, 8 November 2016 at 05:36:22 UTC, Era Scarecrow
>> wrote:
>>
>>> Hmmm.. I had the impression that if something was referenced
>>> by another object, then it couldn't be collected,
>>
>> Another *live* object, I.e. reachable from globals and stack.
>> If you have a big tree and it becomes unreachable (you only
>> had a pointer to its root and you nulled it), then this whole
>> tree becomes garbage, and its nodes and leafs will be
>> collected in unpredictable order, with destructors being run
>> in unpredictable order, even when these dead nodes reference
>> each other.
>
> And I can't help but hope it would start at the largest/base
> object and work it's way up. Or the largest object and then
> work it's way down. Alright...
One of the reasons it is not specified is that very often the
hierarchy is not a simple tree, but a graph with possibly many
cycles. As a matter of fact, very often child nodes have pointers
to parent nodes, so that what is logically a tree is practically
a graph with lots of cycles. So it is not possible to identify a
root object which does not have incoming dead pointers, and no
guarantee can be provided.
More information about the Digitalmars-d-learn
mailing list