IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Erreur étrange en 64 bits


Sujet :

WinDev

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant
    Inscrit en
    Octobre 2004
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 254
    Points : 608
    Points
    608
    Par défaut Erreur étrange en 64 bits
    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.

    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
    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
     
    Vous avez appelé la fonction TableauCherche.
    L'indice de colonne 1 est incorrect. Le tableau ne possède que 2 colonnes.
    Surprenant non ? J'ai un tableau de 2 colonnes, et il me dit que je ne peux pas chercher dans la colonne 1.

    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
    .
    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.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Bonjour,

    il semble que cela soit la combinaison d'utilisation de Arrondi et Max qui pose problème ( un effet de bord ?). En effet si je décompose l'opération en 2 comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MonMax est un entier
    ResArrondi est un entier
    MonMax = Max(2,3)
    ResArrondi = Arrondi(1/MonMax,0)
    je n'ai plus de message d'erreur en 64 bits.

    à noter qu'avec :pas de message d'erreur

    par contre avec : message d'erreur.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. [vector] erreur étrange
    Par Sp4ce dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 10/10/2007, 07h57
  2. Erreur étrange au moment de détruire la TForm
    Par Taka's tiger dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/01/2007, 16h56
  3. Message d'erreur étrange sur mon serveur
    Par irnatene dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 28/11/2006, 14h20
  4. Message d'erreur étrange
    Par maitreblitosaure dans le forum Access
    Réponses: 10
    Dernier message: 29/06/2006, 11h45
  5. Erreur étrange sur recvfrom
    Par Gore dans le forum Développement
    Réponses: 2
    Dernier message: 17/02/2005, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo