Passing a pointer to a function (by value) changes the pointer value

Stefanos Baziotis sdi1600105 at di.uoa.gr
Sun Apr 28 18:16:24 UTC 2019


Hello everyone,

I have a function:
void foo(T *t) { ... }

void bar(...) {
     T *t = ...;
     foo(t);
}

In the debugger, before calling 'foo', 't' had a value (an 
address) let's say 10. Stepping
into 'foo', the 't' that 'foo' got, which is supposed to have the 
same value that the 't' in 'bar' had, actually had a completely 
different value. That caused a very bad bug...

I thought that D behaves in that kind of situations as C/C++, and 
so I thought 'foo' should get the same value but that was not 
true. Needless to say it took a lot of time to notice it
as I would never expect it and I still don't know how to fix it.
How does this happen? Is there are some specifics about pointers 
and / or passing arguments that I should know?

What is also puzzling is that the project is about 4500 lines of 
D code _full_ of pointers
and this happens in all calls I have checked and _somehow_ it was 
working up until now.

Best regards,
Stefanos Baziotis


More information about the Digitalmars-d-learn mailing list