Initialisation d'une matrice en c

Fermé
sofia - 19 oct. 2010 à 15:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 oct. 2010 à 21:29
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é


3 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
19 oct. 2010 à 16:59
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 ....
1
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
19 oct. 2010 à 19:42
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.
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
19 oct. 2010 à 21:29
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 ;-))).
0