A voir également:
- [Langage C] Tableau statique et mémoire
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Mémoire vive - Guide
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
25 avril 2012 à 01:07
25 avril 2012 à 01:07
Ta valeur de retour est incompatible avec ton prototype de fonction.
Tu dois renvoyer une variable de type grille* et tu renvoies *g. En plus *g pointe sur n'importe quoi. Ca aurait pu planter d'ailleurs. Ton compilateur aurait même dû hurler ^^.
Définis plutôt ta variable en : grille *g = malloc(sizeof grille);
Et renvoie : return g;
Et dans ta fonction remplace g[i][j] par (*g)[i][j]
Le type sera cohérent avec le prototype de fonction.
Ca devrait mieux marcher.
Tu dois renvoyer une variable de type grille* et tu renvoies *g. En plus *g pointe sur n'importe quoi. Ca aurait pu planter d'ailleurs. Ton compilateur aurait même dû hurler ^^.
Définis plutôt ta variable en : grille *g = malloc(sizeof grille);
Et renvoie : return g;
Et dans ta fonction remplace g[i][j] par (*g)[i][j]
Le type sera cohérent avec le prototype de fonction.
Ca devrait mieux marcher.
Tout d'abord merci fiddy de ta réponse.
La méthode que tu préconise fonctionne, donc merci.
Maintenant toutes les fonctions que j'avais écrites sans tester roulent !
Sauf une, qui fait intervenir une structure.
La structure imposée est
avec typedef char coup[3];
(avant tout, en remplaçant "coup coups[]" par "coup * coups", tout fonctionne mais ça ne respecte pas la consigne)
La fonction qui pose probleme est celle-ci (elle a été remaniée pour tetner de résoudre le probleme, normalement elle est moins étalée). Elle me renvoie sur l'avant-dernière ligne, "utilisation invalide d'un membre flexible de tableau" !!
Sachant que test(grille g, coup c) fonctionne très bien, pourquoi me dit-il ça ? Je ne comprends même pas ce que signifie ce code erreur !
Et vu que la liste des possibilités est de taille variable, pourquoi nous faire utiliser coup[] plutôt que *coup ? Un tableau dynamique se fait avec pointeur, non ?
Merci d'avance d'une réponse claire
La méthode que tu préconise fonctionne, donc merci.
Maintenant toutes les fonctions que j'avais écrites sans tester roulent !
Sauf une, qui fait intervenir une structure.
La structure imposée est
typedef struct { int nb; coup coups[]; } sqc;
avec typedef char coup[3];
(avant tout, en remplaçant "coup coups[]" par "coup * coups", tout fonctionne mais ça ne respecte pas la consigne)
La fonction qui pose probleme est celle-ci (elle a été remaniée pour tetner de résoudre le probleme, normalement elle est moins étalée). Elle me renvoie sur l'avant-dernière ligne, "utilisation invalide d'un membre flexible de tableau" !!
sqc possibilités(grille g, char p){ //renvoi la séquence des possibilités qu'a p pour jouer sqc * res = malloc(sizeof(sqc); res->nb = 0; coup c; c[0]=p coup * tabc; int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++){ c[1]=i; c[2]=j; if(test(g,c)){ res->nb++; //si c'est le 1er cas, on crée le tableau, sinon on l'agrandit if(res->nbcoups == 1) tabc = malloc(sizeof(coup)); else tabc = realloc(tabc, sizeof(coup)*res->nb); //tabc[res ->nb -1] = c ne fonctionne pas : incompatible type when assigning to type coup from type char * ?! où est défini le char * ? coup = char[3] !! On doit donc faire ça : tabc[res->nb - 1][0] = c[0]; tabc[res->nb - 1][1] = c[1]; tabc[res->nb - 1][2] = c[2]; } } res->coups = tabc; return *res;
Sachant que test(grille g, coup c) fonctionne très bien, pourquoi me dit-il ça ? Je ne comprends même pas ce que signifie ce code erreur !
Et vu que la liste des possibilités est de taille variable, pourquoi nous faire utiliser coup[] plutôt que *coup ? Un tableau dynamique se fait avec pointeur, non ?
Merci d'avance d'une réponse claire