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