Problème de segmentation
Fermé
zamen92
Messages postés
2
Date d'inscription
mardi 26 mars 2019
Statut
Membre
Dernière intervention
26 mars 2019
-
Modifié le 26 mars 2019 à 14:05
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 26 mars 2019 à 16:36
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 26 mars 2019 à 16:36
A voir également:
- Problème de segmentation
- Erreur de segmentation - Forum C
- Erreur de segmentation c ✓ - Forum C++
- Erreur de segmentation (core dumped) ✓ - Forum Programmation
- Erreur de segmentation Core dumped ✓ - Forum C
- Erreur de segmentation ✓ - Forum Linux / Unix
2 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
26 mars 2019 à 14:17
26 mars 2019 à 14:17
'lut,
avant toute chose, lecture obligatoire concernant les exercices. Préciser une date limite dans le but de donner un sentiment d'urgence cause l'effet inverse sur CCM vu que ça montre juste un manque de travail/préparation de la part de celui qui pose la question.
Ensuite, ton message ne comporte aucune question, et "Problème de segmentation" ne veut rien dire sans contexte supplémentaire.
Il faut expliquer ce que tu cherches à faire, et dire où est-ce que ça pose problème précisément. S'il s'agit d'une erreur du compilateur ou à l'exécution, copies-la précisément dans ton message.
avant toute chose, lecture obligatoire concernant les exercices. Préciser une date limite dans le but de donner un sentiment d'urgence cause l'effet inverse sur CCM vu que ça montre juste un manque de travail/préparation de la part de celui qui pose la question.
Ensuite, ton message ne comporte aucune question, et "Problème de segmentation" ne veut rien dire sans contexte supplémentaire.
Il faut expliquer ce que tu cherches à faire, et dire où est-ce que ça pose problème précisément. S'il s'agit d'une erreur du compilateur ou à l'exécution, copies-la précisément dans ton message.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 26 mars 2019 à 16:39
Modifié le 26 mars 2019 à 16:39
Salut zamen92,
ElementW a raison ton message est un peu léger.
J'ajouterai que je n'ai pas lu ton code dans le détail, ni testé ton code, car on ne peut pas tester, en l'absence de données de test et en raison d'une dépendance à une bibliothèque graphique que tu sembles utiliser.
Pour que l'on puisse t'aider, et que tu puisses circonscrire ton problème, tu devrais poster un programme minimal autonome dans lequel ton problème se manifeste et que l'on puisse tester, indiquer ce qui se passe avec quelles données, ce qui devrait se passer selon toi, et pourquoi tu penses que tu as un bogue.
Voilà aussi deux remarques, qui peuvent te guider.
1.
Dans ton code, on voit que tu passes
- tu passes donc un pointeur à la fonction
- lorsque tu es dans la fonction
- si
Au bout de 3 passages, tu as gagné le grade de programmeur 3 étoiles.
Tu n'as pas besoin de rajouter un niveau d'indirection à chaque fois que tu passes un pointeur à une fonction. Tu ajoutes inutilement de la complexité et des chances de mauvaise gestion de ta mémoire (j'ignore si cela est à l'origine de ton bogue, peut-être gères-tu correctement toute cette complexité,... qui me parait cependant inutile).
2.
Je vais supposer que ton problème est que ton code plante avec un message indiquant une erreur de segmentation, et que tu travailles sous Linux, avec
Si tel est le cas, compile avec l'option
Si Valgrind n'est pas installé sur ta machine, installe le.
lance juste :
https://www.valgrind.org/docs/manual/quick-start.html
Dal
ElementW a raison ton message est un peu léger.
J'ajouterai que je n'ai pas lu ton code dans le détail, ni testé ton code, car on ne peut pas tester, en l'absence de données de test et en raison d'une dépendance à une bibliothèque graphique que tu sembles utiliser.
Pour que l'on puisse t'aider, et que tu puisses circonscrire ton problème, tu devrais poster un programme minimal autonome dans lequel ton problème se manifeste et que l'on puisse tester, indiquer ce qui se passe avec quelles données, ce qui devrait se passer selon toi, et pourquoi tu penses que tu as un bogue.
Voilà aussi deux remarques, qui peuvent te guider.
1.
Dans ton code, on voit que tu passes
u, qui est une
structmasquée dans un
typedef, la variable étant déclarée dans main avec
connexion_t u;. Cette
structest visiblement une structure de données où tu veux stocker des choses.
- tu passes donc un pointeur à la fonction
ouv(), qui a pour prototype
int ouv(char* av[],connexion_t* u)...
- lorsque tu es dans la fonction
ouv(),
uest désormais un pointeur sur la
struct, et ce pointeur est tout ce dont on a besoin pour modifier les valeurs de la struct
udans
ouv(), en utilisant la notation
u->janv = 1.0;par exemple
- si
ouv()doit passer ce
uà une autre fonction pour qu'elle puisse accéder aux valeurs de la
structet les modifier, elle peut juste passer
u, qui est déjà un pointeur, et cette autre fonction pourra faire
u->janv = 1.0;exactement de la même façon, etc. ... au lieu de ce que tu fais, qui consiste à passer
&uà chaque fonction dont l'exécution est encapsulée ...
Au bout de 3 passages, tu as gagné le grade de programmeur 3 étoiles.
Tu n'as pas besoin de rajouter un niveau d'indirection à chaque fois que tu passes un pointeur à une fonction. Tu ajoutes inutilement de la complexité et des chances de mauvaise gestion de ta mémoire (j'ignore si cela est à l'origine de ton bogue, peut-être gères-tu correctement toute cette complexité,... qui me parait cependant inutile).
2.
Je vais supposer que ton problème est que ton code plante avec un message indiquant une erreur de segmentation, et que tu travailles sous Linux, avec
gcc.
Si tel est le cas, compile avec l'option
-gpour compiler en incluant des informations de débogage, et exécute ton programme avec Valgrind, qui t'aidera à repérer le code responsable d'une mauvaise manipulation de la mémoire.
Si Valgrind n'est pas installé sur ta machine, installe le.
lance juste :
valgrind nomexecutabledans un premier temps, puis vois si tu as besoin d'options différentes de lancement de Valgrind.
https://www.valgrind.org/docs/manual/quick-start.html
Dal
26 mars 2019 à 16:22
Modifié le 26 mars 2019 à 16:31