Modification d'un champs en langage C
Fermé
COUSSI Matthieu
-
1 avril 2005 à 16:29
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 7 avril 2005 à 21:02
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 7 avril 2005 à 21:02
A voir également:
- Modification d'un champs en langage C
- Langage ascii - Guide
- Suivi de modification word - Guide
- Logiciel modification pdf gratuit - Guide
- Langage binaire - Guide
- Modification dns - Guide
3 réponses
blurk
Messages postés
486
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
160
1 avril 2005 à 19:49
1 avril 2005 à 19:49
salut
ce genre de plantage ressemble à un dépassement de capacité.
("segmentation fault" sous unix(linux), et sous windows ça fait ce genre de choses bizzarres)
au lieu de
tu devrais essayer les pointeurs
et en fin de fonction,
à partir de là, les "." sont à remplacer par des "->"
exemple:
ou bien :
realloc peut aussi être très utile si tu ne connais pas à l'avance le nombre de joueurs lors du chargement du fichier (fread)
bienvenue dans la manipulation de pointeurs !
c'est là tout l'intérêt du C
cordialement
ce genre de plantage ressemble à un dépassement de capacité.
("segmentation fault" sous unix(linux), et sous windows ça fait ce genre de choses bizzarres)
au lieu de
joueurs joueur
tu devrais essayer les pointeurs
struct joueur *joueurs=(struct joueur *) malloc(nombre_de_joueurs * sizeof(*joueur));
et en fin de fonction,
free(joueurs);
à partir de là, les "." sont à remplacer par des "->"
exemple:
joueurs->nom_joueur
ou bien :
joueurs[N° du joueur].nom_joueur
realloc peut aussi être très utile si tu ne connais pas à l'avance le nombre de joueurs lors du chargement du fichier (fread)
bienvenue dans la manipulation de pointeurs !
c'est là tout l'intérêt du C
cordialement
blurk
Messages postés
486
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
160
3 avril 2005 à 21:06
3 avril 2005 à 21:06
ton système ne permet de gérer qu'une seule fiche.
même si le compilateur n'affiche aucune erreur, l'utilisation
de la mémoire avec ce programme risque de planter.
pour gérer plusieurs fiches en mémoire, il faut manipuler les pointeurs.
en C, connaitre les pointeurs c'est INDISPENSABLE.
Il y a pas mal de bonnes docs sur le language C sur ce site,
je te conseille de les lire.
cordialement
même si le compilateur n'affiche aucune erreur, l'utilisation
de la mémoire avec ce programme risque de planter.
pour gérer plusieurs fiches en mémoire, il faut manipuler les pointeurs.
en C, connaitre les pointeurs c'est INDISPENSABLE.
Il y a pas mal de bonnes docs sur le language C sur ce site,
je te conseille de les lire.
cordialement
Il y a un truc que je n'ai pas totalement compris dans ton explication. c'est qu'il faille que j'utilise des pointeurs, le probleme c'est que j'en utilise; sinon j'ai compris ton raisonnement le fait qu'il n'y ait pas assez d'espace mémoire , mais c'est la manip que je n'ai pas capter. Ce n''est pa grave car j'ai contourné la difficulté en incrémentent une variable i a chaque lecture d'enregistrement et dés que la comparaison du strcmp et juste je fai un fseek de i-1. coordialement un novice....Merci de ton Aide
blurk
Messages postés
486
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
160
7 avril 2005 à 17:29
7 avril 2005 à 17:29
tant qu'il n'y a qu'un seul joueur en mémoire pas de problème
tu utilise effectivement des mointeurs statiques
exemple:
la taille d'une structure joueur est connue et tout va bien
avec ce type de pointeurs , mais seulement dans la structure.
si tu dois manipuler 20 joueurs en mémoire
tu peux faire :
mais si tu ne connais pas le nombre de joueurs avant d'avoir chargé le fichier, pas d'autre solution que l'allocation dynamique :
et en fin de fonction
tu peux réalouer au fur et à mesure que le nombre de joueurs augmente.
cela permet de tout charger, tout manipuler en mémoire, et tout sauvegarder d'un seul bloc sans avoir à jongler avec des fseek.
cordialement
tu utilise effectivement des mointeurs statiques
exemple:
char nom_joueur[20];
la taille d'une structure joueur est connue et tout va bien
avec ce type de pointeurs , mais seulement dans la structure.
si tu dois manipuler 20 joueurs en mémoire
tu peux faire :
struct joueurs joueur [20];
mais si tu ne connais pas le nombre de joueurs avant d'avoir chargé le fichier, pas d'autre solution que l'allocation dynamique :
joueurs *joueur= (struct joueurs *)malloc((nombre_joueurs+1) *sizeof( joueurs *));
et en fin de fonction
free(joueur);
tu peux réalouer au fur et à mesure que le nombre de joueurs augmente.
cela permet de tout charger, tout manipuler en mémoire, et tout sauvegarder d'un seul bloc sans avoir à jongler avec des fseek.
cordialement
3 avril 2005 à 14:56
7 avril 2005 à 21:02
++