Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
February 23, 2016 call to super trashes pointer? | ||||
---|---|---|---|---|
| ||||
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? |
February 23, 2016 Re: call to super trashes pointer? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | 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?
fwiw I can reassign the reference (in the classes) to a after B's call to super but still ...
|
February 23, 2016 Re: call to super trashes pointer? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | 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?
|
February 23, 2016 Re: call to super trashes pointer? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rene Zwanenburg | 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.
|
February 23, 2016 Re: call to super trashes pointer? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | 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 |
Copyright © 1999-2021 by the D Language Foundation