Besoin d'aide sur un return de tableaux, et passage pour un sous programme
Résolu/Fermé
A voir également:
- Besoin d'aide sur un return de tableaux, et passage pour un sous programme
- Comment faire un tableau - Guide
- Programme demarrage windows 10 - Guide
- Comment faire un tableau croisé dynamique - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Comment mettre en veille un programme sous windows 10 - Guide
4 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 7 mai 2021 à 10:10
Modifié le 7 mai 2021 à 10:10
Salut Tr,
S'il te plaît, lorsque tu postes du code, fais le en utilisant le bouton "<>▾" dans l'interface du forum en choisissant le langage C pour que ton code soit correctement formaté et indenté sur le forum. Sinon, c'est pas beau et pas très lisible.
SI je résume ta question lorsque tu mets
Or cette fonction retourne soit NULL soit une partie d'un tableau d'un type S_joueur, qui doit être un typedef sur une struc dont on ignore le type car tu ne le fournis pas.
Si la fonction proprietaire() retourne NULL, en l'état, ta fonction versus() ne le vérifie pas et tente de déréférencer le pointeur NULL, ce qui est mal. Tu devrais faire cette vérification.
Si la fonction ne retourne pas NULL, alors ta fonction tente d'afficher le deuxième élément d'un tableau (indice 1) qui est sensé être contenu dans un sous-tableau d'un tableau de ton type struct. Comme on ne sais rien de ton type struct ni de comment les données qu'il peut contenir y ont été mises, on ne peut pas te répondre sur la question de savoir pourquoi un 0 s'y trouverait plutôt qu'un 2.
Dal
S'il te plaît, lorsque tu postes du code, fais le en utilisant le bouton "<>▾" dans l'interface du forum en choisissant le langage C pour que ton code soit correctement formaté et indenté sur le forum. Sinon, c'est pas beau et pas très lisible.
SI je résume ta question lorsque tu mets
proprietaire(2, achat)en 3ème paramètre de la fonction versus() tu t'attends à ce que cette fonction proprietaire() renvoie un type tableau de int.
Or cette fonction retourne soit NULL soit une partie d'un tableau d'un type S_joueur, qui doit être un typedef sur une struc dont on ignore le type car tu ne le fournis pas.
Si la fonction proprietaire() retourne NULL, en l'état, ta fonction versus() ne le vérifie pas et tente de déréférencer le pointeur NULL, ce qui est mal. Tu devrais faire cette vérification.
Si la fonction ne retourne pas NULL, alors ta fonction tente d'afficher le deuxième élément d'un tableau (indice 1) qui est sensé être contenu dans un sous-tableau d'un tableau de ton type struct. Comme on ne sais rien de ton type struct ni de comment les données qu'il peut contenir y ont été mises, on ne peut pas te répondre sur la question de savoir pourquoi un 0 s'y trouverait plutôt qu'un 2.
Dal
Salut Dal, merci pour ta réponse !
D'accord, merci, je le ferais à présent.
Oui c'est ça. J'attends à ce que la fonction propriétaire renvoie un tableau pour pouvoir lancer le combat entre l'attaquant et le défenseur.
Autant pour moi, je vous le donne tout de suite
En utilisant le debugger, j'ai vu que la fonction propriétaire retourne bien quelque chose (pas le NULL, mais le tableau à qui la terre appartient), mais quand c'est le moment de passer au programme versus, propriétaire lui envoie 0.
Dans ce cas, ça devrait envoyer 2, car c'est le nombre d'unité disponible dans chaque territoire (chaque joueur possède 7 territoires, avec au début, 2 unitées).
Merci d'avance
D'accord, merci, je le ferais à présent.
Oui c'est ça. J'attends à ce que la fonction propriétaire renvoie un tableau pour pouvoir lancer le combat entre l'attaquant et le défenseur.
Autant pour moi, je vous le donne tout de suite
struct [https://www.commentcamarche.net/gamer/ joueur] { char pseudo[TAILLE_PSEUDO]; int Territoire[NB_TERRITOIRE]; }; typedef struct joueur S_joueur;
En utilisant le debugger, j'ai vu que la fonction propriétaire retourne bien quelque chose (pas le NULL, mais le tableau à qui la terre appartient), mais quand c'est le moment de passer au programme versus, propriétaire lui envoie 0.
Dans ce cas, ça devrait envoyer 2, car c'est le nombre d'unité disponible dans chaque territoire (chaque joueur possède 7 territoires, avec au début, 2 unitées).
Merci d'avance
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 7 mai 2021 à 11:13
Modifié le 7 mai 2021 à 11:13
Il y a un problème dans ce que tu as posté. Ou alors ce n'est pas du C valide et cela ne compile pas de toutes façons.
Est-ce le tableau Territoire[] que tu veux renvoyer ?
SI oui, en faisant
D'ailleurs, un compilateur comme gcc, en compilant avec les Warnings devrait te dire :
non ?
Pour retourner le tableau tu dois faire
Est-ce le tableau Territoire[] que tu veux renvoyer ?
SI oui, en faisant
return player[0].Territoire[terre-1];tu ne renvoies pas le tableau Territoire, mais un élément du tableau.
D'ailleurs, un compilateur comme gcc, en compilant avec les Warnings devrait te dire :
warning: returning ‘int’ from a function with return type ‘int *’ makes pointer from integer without a cast [-Wint-conversion]
non ?
Pour retourner le tableau tu dois faire
return player[0].Territoire;(pour retourner celui sous player[0]).
Merci pour votre retour et vos explications.
Oui c'est bien le tableau que je voulais renvoyer, mais comme vous me l'avez dit, je viens de me rendre compte de mon erreur, et, en effet, cela m'affichait bien le warning.
Je viens d'essayer avec
Merci beaucoup pour votre aide et vos explications !
En vous souhaitant une bonne journée.
Oui c'est bien le tableau que je voulais renvoyer, mais comme vous me l'avez dit, je viens de me rendre compte de mon erreur, et, en effet, cela m'affichait bien le warning.
Je viens d'essayer avec
return player[i].Territoire;, et cela marche parfaitement !
Merci beaucoup pour votre aide et vos explications !
En vous souhaitant une bonne journée.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
7 mai 2021 à 12:02
7 mai 2021 à 12:02
De rien, je suis content que le problème soit résolu.
Il ne faut jamais ignorer les warnings. Il faut les comprendre et les traiter. Ils signalent dans la quasi totalité des cas un problème réel dans le code, bien que le code compile.
Il ne faut jamais ignorer les warnings. Il faut les comprendre et les traiter. Ils signalent dans la quasi totalité des cas un problème réel dans le code, bien que le code compile.