Ta fonction ne peut pas fonctionner, ton tableau est détruit à la fin de la fonction, tu vas renvoyer un pointeur vers quelque chose détruit et tu aura un segmentation fault.
- define X 10
- define Y 10
// Bien !
void init_tab( int tab[X][Y] )
{
int i,j;
for ( i = 0; i < X ; i++)
for( j = 0; j < Y; j++)
tab[i][j] = i;
}
// Pas bien !
int ** init_tab2 ()
{
int tab[X][Y] = {0};
}
int main(int argc, char **argv)
{
int tab[X][Y];
int ** tab2 = init_tab2();
int i,j;
init_tab ( tab );
for ( i = 0; i < X; i ++)
{
for ( j = 0; j < Y ; j++ )
{
printf("%d",tab[i][j]); // affiche correctement
}
}
for ( i = 0; i < X; i ++)
{
for ( j = 0; j < Y ; j++ )
{
printf("%d",tab2[i][j]); // Segfault
}
}
return 0;
}
Si tu veux quand même avoir une fonction "créerGrille" il faut que tu utilises l'allocation dynamique et que tu renvoies un pointeur de pointeur :
Tpion ** creerGrille (int x , int y)
{
int i, j;
Tpion ** tab = malloc ( sizeof ( Tpion* ) * x );
for ( i = 0 ; i < x ; i ++ )
{
tab[i] = malloc ( sizeof ( Tpion ) * y );
for ( j = 0 ; j < y ; j ++ )
{
tab[i][j] = i;
}
}
return tab;
}