static array internal & dangling reference
Picaud Vincent via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Nov 13 21:53:04 PST 2016
On Sunday, 13 November 2016 at 23:39:37 UTC, Steven Schveighoffer
wrote:
> Note that he is declaring an int[10] inside the function and
> then returning it. The compiler must see that the int[10] will
> be returned, and so it reuses the pre-allocated buffer for
> returning as the same address to avoid copying.
>
> I would guess it's probably fine, with no dangling reference.
Thank you for your comment.
On my side there is still something mysterious. I one case:
int[] f()
{
int[10] sa;
foreach(int i, ref sa_i;sa){
sa_i=i;
}
int[] sb=sa;
return sb;
}
void f_test()
{
auto sb=f();
sb[2]=100; // Valgrind ok
}
Valgrind does not complain.
But on the other case:
// same int[] f() function
void f_test() {
auto sb=f();
sb[2] = 100;
writeln(sb[2]);
int test[100]; // these two lines make Valgrind panicking
writeln(sb[2]); //
}
it complains with "Conditional jump or move depends on
uninitialised value(s)"
I think my two examples are creating a dangling pointer. But I
would be happy to understand why Valgrind is not complaining for
the first one.
Vincent
More information about the Digitalmars-d-learn
mailing list