Garbage collector collects live objects
Steven Schveighoffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Dec 9 06:23:06 PST 2014
On 12/9/14 8:54 AM, Ruslan Mullakhmetov wrote:
>
> Hi,
>
> I experience very strange problem: GC somehow collects live objects.
>
> I found it because i got segfaults. After debugging and tracing i found
> this is because of accessing not allocated memory.
>
> I did the following checks:
>
> - added to some class invariant check for access to suspicious members
> with assertion
>
> assert(GC.addrOf(cast(void*)x) !is null);
>
>
> where it fails DETERMINISTICALLY at some point
>
> - printing address of allocated classes where i observe the following
> pattern
>
> -> ctor
> check
> check
> check
> <- dtor
> check (fails)
>
> could anybody advice me with something? I got really frustrated by this
> strange behaviour which i can not fix right now.
>
> key observations:
> - it is deterministically behaviour (what gets me even more confused
> cause GC collections as far as i know runs from time to time)
> - i do not play with pointers optimisation like hiding its in ints or
> floats.
> - i operate with large uniformly distributed (video) data in memory
> where pointer like patterns may occur. but this is not the case cause
> (1) it brings at worst long living objects (2) input sequence constant
> but allocated pointers each run different.
>
A random guess, since you haven't posted any code, are you accessing GC
resources inside a destructor? If so, that is not guaranteed to work. A
class destructor, or a destructor of a struct that is contained inside a
class, can only be used to destroy NON-GC resources.
If you want more help, you need to post some code. Something that
minimally causes the issue would be good.
-Steve
More information about the Digitalmars-d-learn
mailing list