Solution Re: Segmentation error at the end problem

Charles Hixson charleshixsn at earthlink.net
Sat Jan 31 16:44:30 PST 2009


Charles Hixson wrote:
> Main routine:
> 
> void    main()
> {
>    try
>    {  BlockFile    bf;
>       bf  =  new BlockFile ("test.bf", 4096);
>       writefln ("before close");
>       bf.close;
>       bf  =  null;
>       writefln ("after close");
>       BlockFile    cf  =  new  BlockFile ("test.bf", 4096);
>       writefln ("after second open");
>    }
>    catch (Exception e)
>    {  writefln ("Caught Exception ", e);  }
> }
> 
> Results in:
> Exiting BlockFile::this
> before close
> after close
> Exiting BlockFile::this
> after second open
> Segmentation fault
> 
> I could post all the code.  It's only 146 lines.  But perhaps this is 
> enough?

So after the discussion I decided that it appeared to make BlockFile 
into a scope class.  I did, removing all destructors and delete 
operations.  The new main method was:
void  main()
{
    {  scope BlockFile   bf;
       bf =  new   BlockFile ("test.bf", 4096);
       writefln ("before close");
    }
    {
       writefln ("after close");
       scope BlockFile   cf =  new   BlockFile ("test.bf", 4096);
       writefln ("after second open");
       writefln ("after writefln");
    }
}
Yielding:
Exiting BlockFile::this
before close
after close
Exiting BlockFile::this
after second open
after writefln

Apparently this can't be handled with garbage collection.


More information about the Digitalmars-d-learn mailing list