call to super trashes pointer?

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Feb 23 06:11:33 PST 2016


On 2/23/16 6:05 AM, Nicholas Wilson wrote:
> On Tuesday, 23 February 2016 at 10:47:17 UTC, Rene Zwanenburg wrote:
>> On Tuesday, 23 February 2016 at 09:16:08 UTC, Nicholas Wilson wrote:
>>> struct A
>>> {
>>> int blah;
>>> }
>>> class B
>>> {
>>>     A* a;
>>>     this(A* _a)
>>>     {
>>>         writeln(_a)
>>>         a =_a;
>>>     }
>>> }
>>>
>>> class C : B
>>> {
>>>     this(A* _a)
>>>     {
>>>         writeln(_a)
>>>         super(_a);
>>>     }
>>> }
>>> int main(string[] args)
>>> {
>>>         A a;
>>>         writeln(&a);
>>>         C c = new C(&a);
>>> }
>>>
>>> prints
>>> 7FFF56E787F8
>>> 7FFF56E787F8
>>> null
>>>
>>> ??? What is happening here?
>>
>> I can't reproduce this. After making a few changes to get the code to
>> compile (adding ; after the first two writeln's, and changing int main
>> to void main), everything works as expected. Which compiler and
>> version are you using?
>
> v2.067-devel-e431363
>   I "fixed" it see above.
>

This is not a released version. Using both 2.067.1 and 2.068.0, I get 
the expected behavior. There could have been a regression fixed between 
that version and the release, I suggest you try a released version: 
http://dlang.org/download.html#dmd

-Steve


More information about the Digitalmars-d-learn mailing list