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