Hello, this code fails:
> #include <stdio.h> 
> #include <stdlib.h> 
> #define M 3 
> #define N 3 
> 
> int
> main ()
> {
>   unsigned int contador_x, contador_y, x = 0;
>   unsigned int map[M][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
>   unsigned int (*m2)[M][N] = &map;
> 
> /*  unsigned int (*m)[][] = &map;*/
> /*  void *m = &map;*/
> /* m = malloc(1); */
> /*  printf ("m=%p SIZEOF (*m) = %u  M[1][0]=%u\n", m, sizeof (m), 
> (*m)[1][0]);*/
> /*  (*((unsigned int (*)[3][3]) m + 0) + 0) = 3;*/
> /*  { 
>     unsigned int (*a)[M][N] = &map;*/
> 
>   printf ("INFO: m2=%p SIZEOF (*m2) = %u M[1][1]=%u \n", m2, sizeof (m2), 
> (*m2)[1][1]);
> 
> printf("Setting...\n");
>   for (contador_x = 0; contador_x < M; contador_x++)
>     {
>       for (contador_y = 0; contador_y < N; contador_y++)
>         {
>           *(m2)[contador_x][contador_y] = x++;
>           printf ("MAP[%u][%u]=%u\n", contador_x, contador_y, x);
>         }
>     }
> 
> printf("Printing ...\n");
> 
>   for (contador_x = 0; contador_x < M; contador_x++)
>     {
>       for (contador_y = 0; contador_y < N; contador_y++)
>         {
>           printf ("[%u][%u]=%u\n", contador_x, contador_y, 
> *(m2)[contador_x][contador_y]);
>         }
>     }
> /*  }*/
> /*  free (m);*/
> }
> 

OUT:
You can see [5][2], imposible with limits in for. Can be a problem with pointer 
to multidimensional array? 
If you erase line    *(m2)[contador_x][contador_y]=x++; , for() continues.
> 
> cc test2.c -Wall -L.  -s -o test2
> 
> ./test2
> INFO: m2=0xbfcd8270 SIZEOF (*m2) = 4 M[1][1]=5 
> Setting...
> MAP[0][0]=1
> MAP[0][1]=2
> MAP[0][2]=3
> MAP[1][0]=4
> MAP[1][1]=5
> MAP[5][2]=6
> Printing ...
> [0][0]=0
> [0][1]=1
> [0][2]=2
> [1][0]=3
> [1][1]=4
> [1][2]=1
> [2][0]=3217916696
> [2][1]=3217916740
> [2][2]=10358772
> 

gcc-3.4.3-9.EL4

Thanks, and if this is not a bug sorry.



Reply via email to