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 :D). 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 !Citation:
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:
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 ! ;)