invalid read & write dans une fonction
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:
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 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 );
} |
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.
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!:ccool: