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:
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];
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 : Sélectionner tout - Visualiser dans une fenêtre à part
depart = memo + 1, arrive = indice + 1
pouvait occasionner un dysfonctionnement. D'habitude, il signale quand les conversions de type sont hasardeuse, mais là ... rien

Y a-t-il une option à activer, ou une solution envisageable pour que ce genre de problème éreintant soit éviter ?