Why does this simple program segfault?

Bill Baxter dnewsgroup at billbaxter.com
Tue Aug 14 16:34:25 PDT 2007


BCS wrote:
> Reply to convert,
> 
>> Hi,
>>
>> I wrote this very simple class, but the call to fun.testIt()
>> segfaults.
>> If I put the function outside of the class it works just fine.
>> What am I missing?
>> I have tried this with dmd v1.015 and the tango dmd v1.018, same
>> thing.
>> Thank you very much.
>>
>> -------------------
>> import std.stdio;
>> class Tester
>> {
>> void testIt() {}
>> }
>> void main()
>> {
>> Tester fun;
>> fun.testIt();
>> writefln("I made it!");
>> }
> 
> you don't new the Tester
> 
>> Tester fun = new Tester();
> 
> 

Isn't there something we can do about this?  I do this about once a day 
when in a heavy D using phase.  It bites newbies and not-so-newbies 
alike.  I almost think it should be made so that no initializer calls 
the default constructor, and if you really want it to be null then you 
should initialize with null:

    Tester fun;  // creates a new Tester
    Tester nofun = null;  // doesn't create anything

But then there's all sorts of questions that crop up, like what should 
"new Tester[5]" do?  Or "Tester m_fun;" as a class/struct member.

I guess the best we can hope for is some kind of better error message 
than just a generic segfault, or perhaps a compiler warning if you 
forget to initialize a class instance.

--bb


More information about the Digitalmars-d-learn mailing list