[BCB6] Problème vicieux de variable mal typée
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:arf: , j'ai trouvé ceci:
Code:
1 2
| for( depart = memo + 1, arrivee = indice + 1; depart <= indice; depart++, arrivee++ )
Liste_gdc[depart] = Liste_gdc[arrivee]; |
Or il se trouve que les variables départ et arrivee sont codées sur 1 octet signé.
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'affectation
Code:
depart = memo + 1, arrive = indice + 1
pouvait occasionner un dysfonctionnement. D'habitude, il signale quand les conversions de type sont hasardeuse, mais là ... rien:cry:
Y a-t-il une option à activer, ou une solution envisageable pour que ce genre de problème éreintant soit éviter ?