Why does this simple program segfault?

Ary Manzana ary at esperanto.org.ar
Tue Aug 14 15:40:02 PDT 2007


Bill Baxter escribió:
> 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;

The compiler should do the following:

Since fun wasn't assigned to something, any access to it before an 
assignment to fun should result in a compiler error.

>>> 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.

Any access to Tester[i] before Tester[i] is assigned something should 
result in a compiler error.

> 
> 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