Bonjour,
j'ai codé une petite fonction de calcul sur grands nombres. Les nombres sont envoyés sous forme de chaîne de caracteres, l'operation est réalisée, le resultat stocké dans une autre chaine qui est retournée et tout devrait bien se passer.
Le probleme c'est qu'en faisant tourner Valgrind, j'obtiens beacoup d'erreurs d'ecritures et de lectures invalides dans cette fonction. Et j'ai beau la tourner dans tous les sens, je ne vois pas ce qui euh ne vas pas.
Les erreurs viennent pour la plupart de strln() (invalid read), et des c[i] (invalid read ou invalid write)
Par exemple pour la multiplication, mon code donne:
où a et b sont les deux operandes, c est le résultat. transforme() enlève les zéros inutile et retourne c pour avoir le résultat correct.
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
32
33
34
35
36
37
38
39 void bigMultiplication(char const *a, char const *b, char *c) { /* taille de a */ int szA = strlen( a ); /* taille de b */ int szB = strlen ( b ); /* taille de c */ int szC = szA + szB; int i, j; memset ( c, 0, ( 1 + szC ) * sizeof *c ); for ( i = 0; i < szA; i++ ) { // Retenue int cr = 0; for ( j = 0; j < szB || cr; j++ ) { int tmp = c[i + j] + cr; if ( j < szB ) { tmp += ( a[ szA - i - 1] - '0') * ( b[ szB - j - 1] - '0'); } cr = tmp / 10; if ( cr ) { tmp %= 10; } c[i + j] = tmp; } } for ( i = 0; i < szC; i++ ) { c[i] += '0'; } transforme ( c ); }
Si une bonne âme pouvait jeter un regard neuf la dessus ce serait sympa, car je travaille seul et je ne vois pas ce qui cloche.
Merci!![]()
Partager