A voir également:
- Erreur de compilation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur 3005 france tv - Forum TV & Vidéo
3 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 févr. 2009 à 11:25
19 févr. 2009 à 11:25
Le problème viens du fait, comme je l'ai appris à mes dépend, que tableaux et pointeurs ne sont pas la même chose !
En tableau 1D, ça se passe relativement bien car il y a une certaine équivalence (un tableau est une espèce de char*const : un pointeur constant) mais le tableau à deux dimensions n'a rien à voir avec un pointeur double.
char t[2][2] aloue 2*2=4 espaces mémoire. Un double pointeur ce n'est pas la même philosophie, c'est un tableau de tableau, c'est à dire que la case t[i] contient un tableau qui n'a pas forcément la même taille que t[j].
Il y avait une bonne explication de ce problème dans le forum, un gars qui m'avais plutôt bien expliqué ça, mais je n'arrive pas à remettre la main dessus.
En tableau 1D, ça se passe relativement bien car il y a une certaine équivalence (un tableau est une espèce de char*const : un pointeur constant) mais le tableau à deux dimensions n'a rien à voir avec un pointeur double.
char t[2][2] aloue 2*2=4 espaces mémoire. Un double pointeur ce n'est pas la même philosophie, c'est un tableau de tableau, c'est à dire que la case t[i] contient un tableau qui n'a pas forcément la même taille que t[j].
Il y avait une bonne explication de ce problème dans le forum, un gars qui m'avais plutôt bien expliqué ça, mais je n'arrive pas à remettre la main dessus.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
19 févr. 2009 à 11:35
19 févr. 2009 à 11:35
Salut,
En fait, en C, on envoie pas le tableau mais l'adresse du pointeur. Donc quand tu fais void init_tab(char *tab); ou void init_tab(char tab[]), ça revient exactement au même. Pour un tableau à 2D, c'est pareil, mais là le compilateur a un souci. Il ne peut pas savoir s'il s'agit d'un tableau par exemple de 2 lignes 4 colonnes ou de 1 ligne 8 colonnes (ou autre). D'où le message d'erreur. Pour ça, il faut donner la dimension du nombre de colonnes. Ce qui donne le prototype suivant :
void init_tab(char tab[][2]);
En fait, en C, on envoie pas le tableau mais l'adresse du pointeur. Donc quand tu fais void init_tab(char *tab); ou void init_tab(char tab[]), ça revient exactement au même. Pour un tableau à 2D, c'est pareil, mais là le compilateur a un souci. Il ne peut pas savoir s'il s'agit d'un tableau par exemple de 2 lignes 4 colonnes ou de 1 ligne 8 colonnes (ou autre). D'où le message d'erreur. Pour ça, il faut donner la dimension du nombre de colonnes. Ce qui donne le prototype suivant :
void init_tab(char tab[][2]);
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 févr. 2009 à 11:47
19 févr. 2009 à 11:47
J'ai retrouvé le site, mais pas les messages :
http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node67.html
http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node67.html