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