Initialisation d'une matrice en c
sofia
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
en fait, j'ai une fonction ki initialise une matrice en zéro
et je l'appelle dans mon main du programme après avoir bien sure faire l'allocation dynamique de cette matrice voilà ce ke jé fé excactement:
ma fct:
void initialisation(int *connexion, int nbrouter)
{ int z,y;
//initialization
for (y=0;y<nbrouter;y++)
{for (z=0;z<nbrouter;z++)
{*(connexion+y*nbrouter+z)=0;
}//for
}//for
}
et dans mon main:
int ** connexion,ti,t1,t2;
connexion =(int **) malloc(nbrouter*sizeof(int*));
for(ti=0;ti<nbrouter;ti++)
connexion[ti] = (int *) malloc(nbrouter*sizeof(int));
initialisation(&connexion[0][0],nbrouter);
for(t1=0;t1<nbrouter;t1++)
{
for(t2=0;t2<nbrouter;t2++)
{printf(" %d \t",connexion[t1][t2]);}//for
}//for
lorske j'exécute mon prog,le pb ke la dernière ligne de ma matrice n'est pas nulle !!
voilà le résultat de mon exécution:
0 0 0
0 0 0
3604856 84808088 0 ---> c'est cette ligne ki est fausse
Aidez moi SVP, je me ss bloqué
en fait, j'ai une fonction ki initialise une matrice en zéro
et je l'appelle dans mon main du programme après avoir bien sure faire l'allocation dynamique de cette matrice voilà ce ke jé fé excactement:
ma fct:
void initialisation(int *connexion, int nbrouter)
{ int z,y;
//initialization
for (y=0;y<nbrouter;y++)
{for (z=0;z<nbrouter;z++)
{*(connexion+y*nbrouter+z)=0;
}//for
}//for
}
et dans mon main:
int ** connexion,ti,t1,t2;
connexion =(int **) malloc(nbrouter*sizeof(int*));
for(ti=0;ti<nbrouter;ti++)
connexion[ti] = (int *) malloc(nbrouter*sizeof(int));
initialisation(&connexion[0][0],nbrouter);
for(t1=0;t1<nbrouter;t1++)
{
for(t2=0;t2<nbrouter;t2++)
{printf(" %d \t",connexion[t1][t2]);}//for
}//for
lorske j'exécute mon prog,le pb ke la dernière ligne de ma matrice n'est pas nulle !!
voilà le résultat de mon exécution:
0 0 0
0 0 0
3604856 84808088 0 ---> c'est cette ligne ki est fausse
Aidez moi SVP, je me ss bloqué
A voir également:
- Initialiser une matrice en c
- Impossible d'initialiser le périphérique prn ✓ - Forum Autoit / batch
- Impossible d'initialiser le dispositif d'affichage lol - Forum jeux en ligne
- Impossible d'initialiser le dispositif d'affichage - Forum jeux en ligne
- Impossible initialiser disque dur redondance cyclique - Forum Disque dur / SSD
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
3 réponses
juste un truc.. dans le priintf tu fais:
,connexion[t1][t2])
pourquoi dans l'init tu changes de syntaxe:
*(connexion+y*nbrouter+z)=0;
??
moi j'aurai bien calé un connexion[y][z] = 0 ....
,connexion[t1][t2])
pourquoi dans l'init tu changes de syntaxe:
*(connexion+y*nbrouter+z)=0;
??
moi j'aurai bien calé un connexion[y][z] = 0 ....
Aaaah! Que de confusions!
Tu déclares un tableau de pointeurs dont chaque pointeur pointe vers un tableau... puis, dans l'initialisation, tu fais comme si ton tableau était un tableau à deux dimensions.
RESULTAT: tu as des problèmes et c'est normal. En effet, rien ne dit que tes allocations mémoires successives seront collées les unes aux autres... d'ailleurs ce ne sera que rarement le cas puisqu'elles sont, en fait, alignées sur des paragraphes.
Alors il te faut choisir entre le tableau de pointeurs où le tableau multimensions.
NB: Qui écrit 'malloc' doit écrire 'free', même si cela parait parfois inutile, c'est une bonne habitude à prendre.
Bonne continuation.
Tu déclares un tableau de pointeurs dont chaque pointeur pointe vers un tableau... puis, dans l'initialisation, tu fais comme si ton tableau était un tableau à deux dimensions.
RESULTAT: tu as des problèmes et c'est normal. En effet, rien ne dit que tes allocations mémoires successives seront collées les unes aux autres... d'ailleurs ce ne sera que rarement le cas puisqu'elles sont, en fait, alignées sur des paragraphes.
Alors il te faut choisir entre le tableau de pointeurs où le tableau multimensions.
NB: Qui écrit 'malloc' doit écrire 'free', même si cela parait parfois inutile, c'est une bonne habitude à prendre.
Bonne continuation.
Bonjour,
connexion+y*nbrouter+z=0
Oui, à condition de supposer que les données sont contigües en mémoire. Aucune garantie avec ta déclaration de tableau comme te l'a dit Loupius.
Par contre, si tu utilises connexion[y][z]=0; cela fonctionnera en plus de rendre la notation plus claire.
Ou mieux encore, tu peux utiliser tout simplement la fonction calloc. Elle te permettra d'allouer ton tableau en initialisant à 0 ;-))).
connexion+y*nbrouter+z=0
Oui, à condition de supposer que les données sont contigües en mémoire. Aucune garantie avec ta déclaration de tableau comme te l'a dit Loupius.
Par contre, si tu utilises connexion[y][z]=0; cela fonctionnera en plus de rendre la notation plus claire.
Ou mieux encore, tu peux utiliser tout simplement la fonction calloc. Elle te permettra d'allouer ton tableau en initialisant à 0 ;-))).