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

Langage Delphi Discussion :

Invalid floating point operation


Sujet :

Langage Delphi

  1. #1
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut Invalid floating point operation
    Bonjour,

    Il y a des jours comme ça... Sur un TForm, l'utilisateur rentre 2 valeurs. Lorsque dans un premiers temps je mets 0 partout, les calculs se déroulent bien. Lorsque ensuite je mets une valeur différente de 0 à un des TLabel, le calcul plante avec le message que vous avez dans le titre.

    Là où je ne sais pas où chercher, c'est que la ligne qui déclenche l'erreur n'est pas en erreur. Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauDynamique[i] := valeur * coeff;
    Le hic : i=0, Length(TableauDynamique)=1 et valeur*coeff est égale à 95,2.
    Ces infos sont données par le debuggueur. Du coup je ne sais plus quoi chercher sur ce plantage plus que aléatoire. La cause du plantage doit être ailleurs, mais le debuggueur incrimine une ligne de code valide...

    Si vous avez une idée...

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Par hasard ton tableau dynamique ne serait pas un tableau d'entiers, c-à-d un tableau de Integer ou autre de ce genre ? si oui, c'est la conversion qui pause problème et tu devrais soit faire un tableau d'Extended, soit faire une troncature ou un arondi ( méthodes Truc et Round )...

  3. #3
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    En fait c'est un tableau d'un type record que j'ai déclaré. La valeur dans laquelle j'écrit est de type double.

    Quand je mets en commentaire du code se trouvant après la méthode qui plante, tout fonctionne. Je penche plus vers l'écriture d'une information dans une zone mémoire dans laquelle je ne devrais pas écrire. Je continue mes investigations :/

  4. #4
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Finalement le problème semble avoir une cause bien en amont de celui de la valeur rentrée par l'utilisateur.

    Dans mon soft, j'utilise différent tableau dynamique. A chaque fois que l'utilisateur lance le calcul, les tableaux sont réinitialisés puis remplis.
    J'ai mis en commentaire tous les codes remplissant mes tableaux dynamiques un des ligne qui incrémente la taille de mes tableaux dynamiques.

    Ma question est la suivante : Quand on libère un objet créé dynamiquement, on fait un Objet.Free par exemple. Quand est il d'un tableau dynamique ? Mon problème peut il faire suite à un problème de gestion de mémoire ?
    Jusque là je me contente de faire un SetLength(MonTableau, 1) pour réinitialiser la taille de chaque tableaux à 1. Est ce la bonne solution ? Il me semblait que oui...

  5. #5
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Victoire !

    En fait pour réinitialiser mes tableaux (pour le 2° appel), je faisais un SetLength(MonTableau, 1); pensant que ça en revenait au même que SetLength'monTableau, 0); sauf que gardais l'accès à la première case du tableau. Hors il n'en n'est rien ! Pour assurer le coup j'ai utilisé le finalize, qui est identique à SetLength(MonTableau, 0). Et fini le plantage incompréhensible ! (enfin j'espère, jusque là il n'est pas réapparu).

    C'était mon monologue de la soirée sur Developpez Heureusement que smyley est passé par là

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invalid floating point operation
    Par kurul1 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/03/2014, 13h13
  2. Réponses: 0
    Dernier message: 19/04/2009, 18h55
  3. Envoi de mail avec Indy : message "Invalid floating point"
    Par Nillak dans le forum Web & réseau
    Réponses: 8
    Dernier message: 03/12/2007, 17h20
  4. Microsoft Basic floating point format
    Par hercule4 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/05/2007, 18h18
  5. [VB.NET]Erreur "invalid cross-thread operation"
    Par NicolasJolet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2006, 12h38

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