alors voilà je suis nouvelle sur ce forum et j'ai une segfault que j'arrive pas à supprimer.
je m'explique, je fais un projet pour lequel je dois manipuler de très grands nombres (ex : 230979485048261039076034528529086839797) j'utilise donc la librairie gmp.
mon erreur est la suivante : j'ai un très grand entier (type mpz_t) que je dois convertir en binaire (dans mon cas, créer un tableau de 128 bits), ma fonction de conversion fonctionne parfaitement mais à la fin j'ai une segfault qui apparait alors que le résultat est correct (pour moi elle est là juste pour le fun ). j'ai donc utilisé gdb pour comprendre un peu mieux l'erreur et voilà le résultat :
j'avoue que j'ai jamais compris grand chose à gdb, je l'utilise pour situer la ligne de code fautive mais là il m'aide pas du tout !Program received signal SIGSEGV, Segmentation fault.
0x001befa8 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb) up
#1 0x001bf0cf in exit () from /lib/tls/i686/cmov/libc.so.6
(gdb) up
#2 0x001a6b5e in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb) up
#3 0x080489a1 in _start () at ../sysdeps/i386/elf/start.S:119
119 ../sysdeps/i386/elf/start.S: Aucun fichier ou dossier de ce type.
in ../sysdeps/i386/elf/start.S
Current language: auto
The current source language is "auto; currently asm".
voilà mon programme qui fait la conversion :
voilà j'espère que j'ai été assez claire et que quelqu'un pourra me venir en aide !
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 gmp2bin(mpz_t n, int size, int* bin_tab){ int i=size-1; mpz_t nb; mpz_init_set(nb,n); if(mpz_cmp_ui(nb,0)==0){ while(i>=0){ bin_tab[i] = 0; i--; } } else{ while(mpz_cmp_ui(nb,0)>0){ if(mpz_even_p(nb) == 0){ bin_tab[i] = 1; mpz_sub_ui(nb,nb,1); mpz_divexact_ui(nb,nb,2); } else{ bin_tab[i] = 0; mpz_divexact_ui(nb,nb,2); } i--; } while(i>=0){ bin_tab[i] = 0; i--; } } }
merci d'avance !
Partager