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++ Discussion :

erreur lors de l'afichage


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Points : 32
    Points
    32
    Par défaut erreur lors de l'afichage
    salut,

    le code suivant est executable mais il m'affiche un resulta qui n'est pas juste

    fichier "vecteur.h"
    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
     
    #include <iostream.h>
     
    using namespace std;
     
    class vecteur
    {
     
       int taille;
       int max;
       int *tab;
       public :
       vecteur(int n=10):max(n),taille(0)
       {
           tab=new int[n];
       }
       ~vecteur(){delete[]tab;}
      vecteur(const vecteur &source)
       {
           max=source.max;
           taille=source.taille;
           tab=new int[max];
           for(int i=0;i<taille;i++)
           tab[i]=source.tab[i];
       }
     
       void afficher();
       void ajouter(int);
     
       vecteur somvect(vecteur);
    };
    fichier "vecteur.cpp"
    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
     
    #include"vecteur.h"
     
     
    void vecteur::afficher()
    {
        for(int i=0;i<taille;i++)
     
            cout<<tab[i]<<"|";
            cout<<endl;
    }
     
    void vecteur::ajouter(int x)
    {
        if(taille<max)
        tab[taille++]=x;
    }
     
     
    vecteur vecteur::somvect(vecteur v)
    {
        vecteur som(taille);
     
        for(int i=0;i<taille;i++)
        som.ajouter(tab[i]+v.tab[i]);
        return som;
    }
    fichier "main.cpp"
    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
     
    #include"vecteur.h"
    int main()
    {
     
    vecteur v1,v2,v3;
    int n,x;
    cout<<"nombre de valeur ?";
    cin>>n;
    cout<<"remplir de v1\n";
    for(int i=0;i<n;i++)
    {
        cout<<"donner une valeur :";
        cin>>x;
        v1.ajouter(x);
    }
    cout<<"remplir de v2\n";
    for(int i=0;i<n;i++)
    {
        cout<<"donner une valeur :";
        cin>>x;
        v2.ajouter(x);
    }
     
    v3=v1.somvect(v2);
    cout<<"v1+v2=";v3.afficher();
     
     
     
        return 0;
    }

    voila un exemple d'execution

    le valeur de "V1"

    2 3 4

    les valeur de "V2"

    5 6 7

    V1+V2=0|9|11


    le probleme c 'est au nivaeu la valeur 0 noramalement il m'affiche

    V1+V2=7|9|11


    j'ai teste plusieurs cas mais quand je fait eliminer le destructeur il m'affiche un resultat juste



    merci d'avance

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu n'aurais pas oublié de définir ton opérateur d'assignation?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    c'est parce que vous accédez dans un int[] qui a été libéré.

    dans v3=v1.somvect(v2) le vecteur rendu pas somvect est recopié membre par membre dans v3, cela veut dire que v3.tab reçoit la valeur du même membre issu de la valeur retournée pas comvect, mais le vecteur rendu pas [I]comvect/I] est temporaire => celui-ci est détruit => v3.tab pointe donc sur quelque chose de libéré

    lorsqu'une classe contient au moins un pointeur qui est libéré par le destructeur (ce qui est votre cas) ou qui ne peut pas être partagé, il est impératif de définir l'opérateur d'affectation et le constructeur par copie, ou de faire en sorte que ceux-ci ne puissent pas être utilisés y compris de façon implicite
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

Discussions similaires

  1. [MySQL] erreur lors de l'afichage en php5
    Par mdh12 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/05/2010, 10h23
  2. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  3. Erreur lors de la connexion
    Par mathll65 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2004, 17h46
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

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