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

C++Builder Discussion :

[BCB6] Problème vicieux de variable mal typée


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut [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 , 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 ?

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Je pense qu'il faut que tu active le warning numéro W8071 dans tes options de projet (onglet Compilateur, bouton avertissement du compilateur)

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Merci beaucoup, je n'avais pas vu toutes les possibilités d'option sur les messages d'avertissement.
    Le problème potentiel est maintenant détecté à la compilation
    Du coup, le compilateur m'a indiqué un tas de problème du même genre.
    Pourtant j'essaie d'être rigoureux quant à la déclaration du bon type de variable, mais y rien à faire... l'erreur est humaine !

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Si tu veut être sur que tout soit bon, il faut que tu compile ton projet avec toute les options d'activé et qu'il n'y ai aucune erreur ni aucun avertissement à la fin de la compilation.

    Par contre, fait attention, Builder n'affiche pas toujours les message d'avertissement, si tu compile une fois le projet pas de problème, et si tu recompile de suite ton projet, il ne ré affichera pas forcement les avertissement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2011, 20h28
  2. [AC-2007] problème avec des variables de type hyperlink
    Par rominous41 dans le forum VBA Access
    Réponses: 4
    Dernier message: 19/05/2011, 16h05
  3. Problème avec une variable de type objet
    Par mrocks dans le forum C#
    Réponses: 7
    Dernier message: 09/05/2009, 22h27
  4. problème avec une variable de type string
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2007, 14h53
  5. Réponses: 1
    Dernier message: 21/12/2005, 19h08

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