Erreur de segmentation - C - Programmation
Marsh Posté le 12-12-2005 à 13:19:31
oui : étudier soigneusement ton code, et en particulier partout ou ca joue avec des pointeurs et des tableaux. (Ce qui implique de bien maitriser la notion de pointeurs )
Marsh Posté le 12-12-2005 à 13:34:00
bonjour theshockwave et 0x90
J'ai cherché de la doc. sur le net à propos de gdb, et je suis arrivé à celà : (j'essaie de débugger le programme ex10b)
Citation : [guillaume@localhost ex10]$ gdb ex10b |
n'y-a-t-il pas moyen de mettre un numéro de ligne là-dessus ?
Citation : (Ce qui implique de bien maitriser la notion de pointeurs ) |
c'est bien le problème lol
Marsh Posté le 12-12-2005 à 13:37:49
Le problème avec les erreurs de segmentation, c'est que ce n'est pas forcément une ligne précise qui provoque l'erreur.
L'erreur survient si on essaye d'acceder avec un pointeur a un bout de mémoire auquel on a pas le droit.
Maintenant imagine qu'a un moment tu te serve d'un pointeur dans ton programme, et tu te plante tu lui donne une mauvaise valeur.
Si t'as de la chance, ca pointe vers un endroit invalide -> Segfault.
Si t'as pas de change, ca pointe pas ou tu veut mais vers un endroit valide -> Le programme continue, et plantera plus tard, parfois, des fois a moitié des fois pas du tout, t'aura ptêtre des valeurs bizarres mais pas de segfault, etc...
En gros, un segfault n'arrive pas forcément a l'endroit du code d'ou l'erreur est partie, difficile donc de dire d'ou vient l'erreur en terme de "ligne de code"...
Marsh Posté le 12-12-2005 à 13:48:02
Erreur sur un strcpy()... je veux voir la définition des variables source et cible de la fonction, parce que je subodore un dépassement de capacité
Tu peux nous poster ça, sixtiesman ?
Marsh Posté le 12-12-2005 à 13:49:27
Citation : L'erreur survient si on essaye d'acceder avec un pointeur a un bout de mémoire auquel on a pas le droit. |
mmmm... le fameux "address space" ?
Citation : En gros, un segfault n'arrive pas forcément a l'endroit du code d'ou l'erreur est partie, difficile donc de dire d'ou vient l'erreur en terme de "ligne de code"... |
ouille ouille ouille
Si j'ai bien compris, mon seul point de départ, c'est de savoir que c'est un des "strcpy" qui pose problème
Marsh Posté le 12-12-2005 à 13:51:27
sixtiesman a écrit : |
Donne le core généré à gdb, il te donnera plus d'information.
Marsh Posté le 12-12-2005 à 13:54:33
Elmoricq a écrit : Erreur sur un strcpy()... je veux voir la définition des variables source et cible de la fonction, parce que je subodore un dépassement de capacité |
d'accord, mais ne vous moquez pas alors
Citation : #include <stdio.h> |
Citation : Donne le core généré à gdb, il te donnera plus d'information. |
Il se trouve où ce fameux core ? A mon école il se trouve dans le repertoire courant oui mais pas ici dans ma distrib. linux. merci
Marsh Posté le 12-12-2005 à 13:57:01
My God.
Bon, sinon je peux te dire que l'erreur vient de n'importe quel strcpy() avec NULL en paramètre.
Je n'ai pas regardé le reste, je tiens à ma santé mentale. Mais comme ça en quelques secondes, je peux te dire qu'il y a des tas d'autres points qui posent problème
EDIT : code pour isoler le problème :
#include <stdio.h> |
EDIT 2 : explication rapide : strcpy() part de l'adresse que tu lui donnes en second paramètre, et copie tous les char qu'il trouve vers l'adresse donnée en premier paramètre, jusqu'à ce qu'il trouve '\0' (pas le caractère "0", mais un char entièrement à 0, exemple : 0x00).
Donc là tu lui demandes de copier des données à partir de NULL qui, par définition, représente le néant.
Marsh Posté le 12-12-2005 à 14:04:45
oui je comprends que j'ai fait une connerie là... Je ne t'en veux pas de t'épargner de ceci lol
je vais continuer à travailler seul mnt merci
juste un petit mot d'explication : il se trouve où le "core" ?
Marsh Posté le 12-12-2005 à 14:05:32
A l'endroit à partir duquel tu as exécuté le binaire, normalement.
Sinon tente le bon vieux "find / -name core"
Marsh Posté le 12-12-2005 à 14:17:49
pas de fichier core dans le repertoire courant non
Citation : [guillaume@localhost ex10]$ ls |
voici les seuls core qu'il a trouvé.
Citation : /dev/core |
Celà n'est pas bien grave,
merci theshockwave, 0x90 et surtout Elmoricq pour ton aide,
vous êtes cools
Marsh Posté le 12-12-2005 à 13:15:39
bonjour...
avant tout soyez indulgeant car je suis débutant en C
J'ai un soucis lorsque je lance mon programme sous linux : j'obtiens le message "erreur de segmentation" lors de l'execution.
A partir de là, y'a-t-il un moyen qui permet de déterminer la ligne qui pose problème ?
Merci d'avance