Je suis en train de déboguer une erreur de segmentation, et j'ai cette sortie de gdb:Aide interprétation gdb: segfault en fonction
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x08048af9 in parse_option_list (ptr=0x6f72505f <Address 0x6f72505f out of bounds>, box_name=0x696d6978 <Address 0x696d6978 out of bounds>, option_list=0x313a7974,
num_elements=0x33313532) at submit.c:125
125 memcpy(&(option_list[(*num_elements)].value), value, 24);
(gdb) p num_elements
$15 = (int *) 0x33313532
(gdb) p *num_elements
Cannot access memory at address 0x33313532
(gdb)
Il me semble que quelque chose dans memcpy() va détraquer. Mais je ne peux pas comprendre exactement quel est le problème, puisque cette ligne fait référence à tant de variables.
Quelqu'un peut-il aider à comprendre ce que la ligne 0x8048af9 in parse_option_list...
me dit?
Ma signature de la fonction est:
int parse_option_list(char *ptr, char *box_name,
struct option_list_values *option_list, int *num_elements)
Et cela pourrait être utile:
struct option_list_values {
char value[24];
char name[24];
};
En outre, les variables value
et name
ne sont pas segfaulting (mais si vous pensez qu'ils sont, je peux poster le code qui définit ces valeurs.) Mais maintenant, si je peux comprendre cette sortie gdb, je serai heureux comme une palourde! Je vous remercie!
Je suppose que 0x8048af9 est juste l'adresse de l'instruction de défaut (que gdb a pu trouver existant dans la fonction parse_option_list). Ce binaire a-t-il été construit avec des optimisations? Il pourrait être plus facile de déboguer une version non optimisée. – reuben
Les optimisations sont désactivées. (par défaut, je viens d'ajouter -O0 pour être sûr, le même problème.) – poundifdef