Bonjour,
Je développe un petit jeu en mode console,où deux groupes de combattants s'affrontent !!
Bref,j'ai donc créer une structure groupe qui contient le pointeur vers le premier combattant,et une strucuture combattant avec l'adresse du prochain combattant.
Le problème vient là,je réalise la saisie du nom et leur métier (Guerrier,mage...)
lorsque la saisie est parfaite au niveau de la taille du nom(sans dépassement de mémoire),tout se passe normalement,aucun problème.
Lorsque je la dépasse, le programme se quitte tout seul sans message d'erreur,après une multitude de printf et system pause,j'ai ciblé exactement a quelle ligne sa planté:
en fait,pour expliquer tout bien,je fais la saisie de mon premier groupe,avec une mauvaise saisie pour un de leurs combattants(trop de caractères),donc la il y a une resaisie,puis tout se passe bien jusqu'a la création des combattants suivants,car un premier combattant est bien créé,et le programme s'arrète ensuite a la ligne mentionnée si dessous
et voici pour la saisie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 #include <stdio.h> #include <stdlib.h> #include "structure.h" /* ------------------------------------------------------ Fonction cherchant le dernier combattant de la liste -------------------------------------------------------*/ combattant *trouver_dernier_combattant(groupe *debut) { combattant *test;//=(combattant*)malloc(sizeof(combattant)); test=debut->premier_combattant; //on donne l'adresse du premier combattant au pointeur test de structure combattant //_flushall; if (test==NULL) //ce contrôle permet de voir il y a au moins un premier combattant { return NULL; } while(test->combattant_suivant!=NULL) //cette phase va chercher le dernier combattant dans la liste { test=test->combattant_suivant; //on donne l'adresse de la structure du combattant suivant au pointeur test de structure combattant } return test; //free(*test); } /* ----------------------------------- Fonction qui ajoute un combattant ------------------------------------*/ void ajouter_combattant (groupe *debut) { combattant *dernier_combattant; ==>combattant *cb=(combattant*)malloc(sizeof(combattant)); cb->combattant_suivant=NULL; cb->tour=0; cb->points_de_vie=0; cb->points_d_attaque=0; cb->magie=0; //_flushall; if(debut->premier_combattant==NULL) //ce contrôle permet de voir si il y a un premiercombattant { debut->premier_combattant=cb; //si oui alors on créer le premier combattant de la liste } else { dernier_combattant=trouver_dernier_combattant(debut); //sinon on apelle la fonction trouver dernier combattant pour dernier_combattant->combattant_suivant=cb; //créer un nouveau combattant à la suite du dernier combattant } //free(*cb); }
Merci pour vos suggestions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 void saisie_combattant(groupe *un_groupe) { _flushall(); int retour; int i=0; int ok=0; combattant *warrior; warrior = un_groupe->premier_combattant; combattant *a =(combattant*)malloc(sizeof(combattant)); while (warrior != NULL) { printf("\n\nVeuillez saisir les informations du combattant %i du groupe %s \n",i,un_groupe->nom_du_groupe); // Annonce la saisie des combattants printf("\n\nNom du combattant:\n\n\t\t\t===>"); gets(a->nom); while(strlen(a->nom)>20 || strlen (a->nom)<1) { printf("Le nom du combattant doit contenir au moins 1 caract%cre,et au plus 20 caract%cres",138,138); free(a->nom); _flushall(); printf("\n\nVeuillez choisir le nom de votre %cquipe:\n\n\n\t\t\t===>",130); gets(a->nom); // Saisie du nom du groupe de combattants } strcpy(warrior->nom,a->nom); points(un_groupe,warrior); sleep(500); choix_metier(un_groupe,warrior); sleep(500); warrior = warrior->combattant_suivant; } }
Partager