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

Linux Discussion :

[C++] Problème d'affectation.


Sujet :

Linux

  1. #1
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 304
    Points : 4 971
    Points
    4 971
    Billets dans le blog
    5
    Par défaut [C++] Problème d'affectation.
    Bonjour.

    Dans une class j'initialise deux tableaux de double avec quelques formules. Ces deux tableaux sont déclarés private :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double CoordX[3], CoordY[3];
    Dans une des méthodes de cette class je fais ceci:
    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
      X = -0.86*size + (x*0.86*size) - (y*0.86*size);
      Y = size*(mapsize-2)/2 - (y*0.5*size) - (x*0.5*size);
     
    std::cout << "X,Y : "<<X<<","<<Y<<std::endl;
      CoordX[0] = X;
      CoordY[0] = Y;
      CoordX[1] = X+(0.86*size);
      CoordY[1] = Y-(0.5*size);
      CoordX[2] = X+(1.73*size);
      CoordY[2] = Y;
      CoordX[3] = X+(0.86*size);
      CoordY[3] = Y+(0.5*size);
     
    std::cout << "A("<<CoordX[0]<<","<<CoordY[0]<<")"<<std::endl;
    std::cout << "B("<<CoordX[1]<<","<<CoordY[1]<<")"<<std::endl;
    std::cout << "C("<<CoordX[2]<<","<<CoordY[2]<<")"<<std::endl;
    std::cout << "D("<<CoordX[3]<<","<<CoordY[3]<<")"<<std::endl<<std::endl;
    Et voila le résultat en console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exécuter*: lancer essai
     
    X,Y : -43,0
    A(-43,-6.66134e-16)
    B(-6.66134e-16,-25)
    C(43.5,0)
    D(-6.66134e-16,25)
    Comme vous pouvez le voir au départ j'obtiens pour X et Y deux valeurs entières que j'affecte à CoordX[0] et CoordY[0]. Malheureusement l'affichage du contenu de ces deux tableaux est loin du résultat attendu. J'en perds mon latin

  2. #2
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    Le résultat n'est pas si éloigné que celà...
    De quel type sont X et Y ?

    Lilian.

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 304
    Points : 4 971
    Points
    4 971
    Billets dans le blog
    5
    Par défaut
    De type double comme les tableaux CoordX et CoordY.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 304
    Points : 4 971
    Points
    4 971
    Billets dans le blog
    5
    Par défaut
    Bon, ca n'a pas été sans mal mais j'ai solutionné.

    J'ai commencé par changer de type. Je suis passé en int, ce qui n'est pas gênant en soit pour mon application. Ca m'a permis de supprimer l'imprécision à l'affichage. Cependant les valeurs erronées étaient toujours là. En y regardant d'un peu plus près je me suis aperçu d'un problème d'allocation mémoire.

    Je m'explique. Si j'alloue deux objets de la class, CoordX[0] et CoordY[0] du deuxième objet prennent les valeurs de CoordX[3] et CoordY[3] du premier objet! Bizarrement il y a un chevauchement mémoire. En allouant un tableau à 5 éléments et non 4 (le 5ème ne servant à rien ici sauf à éviter ce chevauchement) tout rentre dans l'ordre!

    Quelqu'un aurait-il une explication? Est-ce moi qui me fourvoie ou bien y-a-t-il un problème lors de la compilation?

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Bonjour, tu alloues dans ton exemple initial des tableaux de trois éléments (double CoordX[3]). C'est à dire que les indice acceptables vont de 0 à 2. Pas jusqu'à 3.

    J'imagine que ton code actuel contient un problème analogue.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 304
    Points : 4 971
    Points
    4 971
    Billets dans le blog
    5
    Par défaut
    Je vais de ce pas acheter une corde et vais me pendre haut et court dans la forêt

    Ca me creuvait les yeux mais non, moi bourrin que je suis, je ne voyait rien. Je suis vraiment un âne!

    Merci à toi de m'avoir ouvert les yeux.

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

Discussions similaires

  1. problème d'affectation
    Par Nelmo dans le forum MFC
    Réponses: 8
    Dernier message: 04/05/2006, 15h29
  2. Réponses: 3
    Dernier message: 04/04/2006, 10h39
  3. Problème d'affectation de variable
    Par bob33 dans le forum C
    Réponses: 3
    Dernier message: 04/11/2005, 18h01
  4. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 15h52
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 22h10

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