[C] Probleme de passage d'un pointeur de tableau

Résolu
tenev911 Messages postés 23 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 19 avril 2009 - 3 déc. 2006 à 01:11
tenev911 Messages postés 23 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 19 avril 2009 - 3 déc. 2006 à 22:14
Bonjour, voici mon probleme :

J'utilise la librairie ncurses.h et il permet de faire un type de variable appellé WINDOW (qui correspond graphiquement à un pointeur qui me permettra de creer une zone de texte sur l'écran) et qui est un pointeur, donc WINDOW*

J'ai fait une fonction qui affiche un tableau (Car c'est un peu compliqué d'en faire un sous ncurse.h) et qui "retourne" en quelque sorte les cases de la grille pour pouvoir apres écrire à l'interieur. Et j'ai un probleme de passages de pointeurs de tableau, je m'explique :

Je creer ma fonction :
#define HAUTEUR 10
#define LARGEUR 10

void affichTab(WINDOW **cases[HAUTEUR][LARGEUR], autre_arguments...)
{
      Je creer et affiche ma table ici et pour chaque cases je fait :
      *cases[0][0] = newwin(coordonnées et taille de la case) // Creer une zone de texte sur l'écran dans lequel on pourra écrire dedans apres
      // En vrai j'utilise un double for pour faire ca a toutes les cases
}

Apres coup, dans le main je met ceci :
int main(void)
{
   WINDOW *cases[HAUTEUR][LARGEUR];
   affichTab(&cases, autres_arguments...);
   wprintw(cases[0][0], "Salut je suis la case 0,0"); // wprintw me permet d'écrire dans la zone graphique que j'ai prédéfinit dans la fonction
}

Donc voila, si je n'invoque pas la fonction affichTab, le wprintw ne saura pas où écrire vu que je n'aurai pas utiliser la fonction newwin, mais quand je l'utilise de la façon que je vient de vous décrire, il me dit que je passe un type d'argument incompatible.

Si dans ma fonction je met en argument *cases[HAUTEUR][LARGEUR] et que dans l'appel de ma fonction je met cases au lieu de &cases, alors parfois ca marche et parfois j'ai une erreur de segmentation (normal)

Je suis encore débutant en C mais je pense que c'est peut-etre parce que je ne sais pas trop passer en argument un pointeur de tableau à deux dimensions. J'ai tout essayé : &cases, cases, &(*cases) mais rien n'y fait.
Si la fonction malloc est la solution, je ne sais pas l'utiliser pour un tableau à deux dimensions.

Merci à ceux qui pourront m'aider

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
3 déc. 2006 à 21:22
Non, tu n'as pas bien compris, il faut que tu revois l'utilisation de pointeurs.

void affichTab(WINDOW* cases, autre_arguments...)

Puis dans l'appel :
WINDOW cases[HAUTEUR][LARGEUR];
affichTab(cases[0], arguments...);
3
Bling 182 Messages postés 510 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 5 juillet 2009 3
3 déc. 2006 à 11:48
Salut !

Déjà, dans ton main tu déclares un WINDOW *cases, et dans afficheTab tu prends en paramètre un WINDOW **cases. Ca ne peut pas fonctionner.

Et il faut te décider si tu déclares avec des pointeurs, ou avec une taille définie, c'est à dire WINDOW **cases; OU WINDOW cases[HAUTEUR][LARGEUR]; .
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
3 déc. 2006 à 16:12
Le pointeur d'un WINDOW case[10][10] est case[0] et pas &case !
0
tenev911 Messages postés 23 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 19 avril 2009
3 déc. 2006 à 20:09
Hum, ca ne marche toujours pas, si j'ai compris vos expliquations dans ma fonction je doit faire :

void affichTab(WINDOW *cases[HAUTEUR][LARGEUR], autre_arguments...)

Puis dans l'appel :
WINDOW cases[HAUTEUR][LARGEUR];
affichTab(cases[0][0], arguments...);

Mais j'ai toujours un type incompatible dans la compilation, étrange
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tenev911 Messages postés 23 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 19 avril 2009
3 déc. 2006 à 22:14
Merci ça marche ! Je n'ai plus l'erreur !
0
Rejoignez-nous