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