Segmentation error at the end problem (148 line program listing)
Charles Hixson
charleshixsn at earthlink.net
Fri Jan 30 15:53:23 PST 2009
grauzone wrote:
> Charles Hixson wrote:
>> I replaced BlockFile.close with:
>> void close()
>> { if (bf !is null) delete bf; // bf.close;
>> bf = null;
>> }
>>
>> But that didn't alter the segmentation fault. (Did you try it under
>> D1 or D2?)
>
> Your destructor calls close(), and close() accesses the reference bf.
> But accessing references is not allowed in destructors. I think "delete
> bf;" still counts as accessing a reference.
>
> The reason is, that the garbage collector calls the destructor, when an
> object becomes unreachable. The order the destructors are called is
> undefined. References to other objects may no longer be valid, because
> these objects were already destroyed.
Hmmm.... reasonable. Any idea how I should handle it? I want to ensure
that the file is closed when the container is released. Maybe just get
rid of the close method? But the garbage collector isn't guaranteed to
run at any particular time...(OTOH, I am doing GC.collect...it would be
nice to find a way to get rid of that, too. Maybe I could solve this by
moving GC.collect inside the delete method, and not doing anything else
there?)
Didn't work. And when I added:
writefln ("after writefln");
into the main program after "writefln (\"after second open\");"
it had a segmentation error before reaching the "after writefln"
More information about the Digitalmars-d-learn
mailing list