static array of pointers to dynamic arrays of ints problem...
Neia Neutuladh
neia at ikeran.org
Sun Apr 22 06:18:14 UTC 2018
On Sunday, 22 April 2018 at 06:00:15 UTC, WhatMeForget wrote:
> foreach(i, elem; a)
> {
> int[] temp = new int[](5);
> ......
> a[i] = &temp;
> }
You're taking the address of a local variable and persisting it
beyond the variable's scope. This is not safe in general;
compilers regularly reuse spaces on the stack. DMD specifically
tends to do this reliably with foreach loop bodies.
You see the same thing in C:
#include <stdio.h>
int main(int argc, char** argv)
{
int* p[2];
for (int i = 0; i < 2; i++)
{
int f = i;
p[i] = &f;
}
printf("p[0] = %x, *p[0] = %d\n", p[0], *p[0]);
printf("p[1] = %x, *p[1] = %d\n", p[1], *p[1]);
return 0;
}
Which prints something like:
p[0] = d9b69428, *p[0] = 1
p[1] = d9b69428, *p[1] = 1
More information about the Digitalmars-d-learn
mailing list