Bonjour,
j'ai rencontré un problème de fonctionnement de mon programme assez vicieux:
il arrivait qu'il me déclenche une exception du genre "Le programme essai de lire des adresses mémoire auquel il n'a pas droit d'accéder..."
( Enfin c'est une traduction de l'idée du message d'erreur).
Ou alors, j'avais des variables dont les données étaient sabotées aléatoirement au cours des calculs...
Après avoir passé plusieurs jours à essayer de localiser la portion de programme en faute, j'ai trouvé ceci:
Or il se trouve que les variables départ et arrivee sont codées sur 1 octet signé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for( depart = memo + 1, arrivee = indice + 1; depart <= indice; depart++, arrivee++ ) Liste_gdc[depart] = Liste_gdc[arrivee];
Alors que memo et indice sont des entiers sur 4 octets.
Ainsi il arrivait parfois que memo + 1 ou indice + 1 dépassent la valeur fatidique de 128, le maximum possible pour une variable de type octet signé.
Du coup, l'accès au tableau Liste_gdc[indice complètement imprévisible], occasionnait des cafouillage mémoire.
Je suis étonné de ne pas avoir été avertit par le compilateur que l'affectationpouvait occasionner un dysfonctionnement. D'habitude, il signale quand les conversions de type sont hasardeuse, mais là ... rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part depart = memo + 1, arrive = indice + 1
Y a-t-il une option à activer, ou une solution envisageable pour que ce genre de problème éreintant soit éviter ?
Partager