Initialisation d'une matrice en c

sofia -  
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é


3 réponses

Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
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   Statut Membre Dernière intervention   148
 
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   Statut Contributeur Dernière intervention   1 846
 
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