Bonsoir,
J'aimerai vous soumettre l'erreur suivante qui me laisse perplexe.
Le même code fonctionne correctement en 32 bits et provoque une erreur fatale en mode 64 bits.
Le code qui provoque l'erreur est d'une banalité confondante. Il s'agit en gros de générer une chaine de caractères en parcourant la table ASCII, mais en sautant certains caractères (par exemple les minuscules).
Voici le code simplifié. Il n'a pas d'intérêt en tant que tel quel mais provoque bien l'erreur.
Et bien ce code qui fonctionne en 32 bits, provoque l'erreur suivant en 64 bits :
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 eNumAscii est un entier eNumAsciiMin est entier = 32 eNumAsciiMax est entier = 175 // tableau dans lequel on met les plages de caractères ascii à sauter tSautsAscii est tableau de 0 par 2 entiers // par exemple, si on arrive au num ascii 91,on passe au 123 AjouteLigne(tSautsAscii,91,123) // pour sauter les minuscules AjouteLigne(tSautsAscii,127,128) // pour sauter le DEL eNumAscii = 1 BOUCLE (500) // la ligne suivante provoque une erreur fatale sur tableaucherche en mode 64 bits !! Arrondi(1/Max(2,3),0) // on cherche s'il ne faut pas sauter toute une plage de caractères ascii i est entier = TableauCherche(tSautsAscii,tcLinéairePremier,1,eNumAscii) SI i <> - 1 eNumAscii = tSautsAscii[i][2] FIN eNumAscii ++ SI eNumAscii >eNumAsciiMax ALORS eNumAscii = 1 FIN Trace(eNumAscii) FIN
Surprenant non ? J'ai un tableau de 2 colonnes, et il me dit que je ne peux pas chercher dans la colonne 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Vous avez appelé la fonction TableauCherche. L'indice de colonne 1 est incorrect. Le tableau ne possède que 2 colonnes.
Et c'est bien la ligne
qui provoque l'erreur, alors même qu'elle n'a rien à voir avec la ligne évoquée par le message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part Arrondi(1/Max(2/3),0)
.
On l'enlève et plus d'erreur !
Vous me direz que Arrondi(1/Max(2/3),0), ca ne sert pas à grand chose et que je peux m'en passer.
Sauf que dans le vrai code, 1, 2 et 3 sont des variables et que ca sert vraiment à quelque chose !
Bizarre, vous avez dit bizarre...
J'aurai été curieux de savoir si certains reproduisent ce comportement.
Cdlt, Arnaud.
Partager