Why does this simple program segfault?

Bill Baxter dnewsgroup at billbaxter.com
Tue Aug 14 16:51:19 PDT 2007


Ary Manzana wrote:
> 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 don't think that's something that could be realistically enforced 
using static analysis.  How would you propose implementing that?

--bb


More information about the Digitalmars-d-learn mailing list