Why does this simple program segfault?
Ary Manzana
ary at esperanto.org.ar
Tue Aug 14 20:44:16 PDT 2007
Bill Baxter escribió:
> 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?
Umm... Now that I think of, the first comment I made is doable (Java
does it), but the second... forget it.
More information about the Digitalmars-d-learn
mailing list