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 :

perte de donnée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut perte de donnée
    Bonjour à tous

    Voila ma situation je possède une classe outilDessin classe abstraite et une classe dérivé classe Point(d'autre à venir), je possede également une liste chainé permettant de gérer les pointeurs sur outilDessin.
    Enfin je possede une classe composite, elle contient une liste d'objet, et permet de gérer tous ces objets (sauvegarde,restauration,ajout d'objet....)
    Maintenant mon probleme vient de la restauration d'une scene à partir d'un fichier texte
    voila un bout du code de la restauration :

    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
    int taille;
    entree>>taille;
     
    //je recupere les objets :
     
    int type;
    for (int i=1 ; i<=taille ; i++)
    {
    	entree>>type; //je recupere le type de mon objet (0 pour le point)
    	switch(type)
    	{
    		case 0 :
    		{
    			Point * P = new Point;
    			P->ecritureEntree(entree); //fonction retournant dans P le
                                                                //point récupéré du fichier
    		 	addObject(*P);
    			delete P;
    		}
     
                    ......
    	}
    }
    Voila j'ai déjà tenter beaucoup de variantes mais le problème récurrent vient du fait que la mémoire de l'objet P est désallouée donc je ne plus accéder aux valeur du point dans ma liste chainée par la suite !!!

    je vous remercie d'avance ; )
    @bientot
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut que tu stockes des pointeurs dans ta liste ; par valeur comme tu le fais actuellement cela ne va garder que la partie outilDessin de chaque instance, et virer toute donnée spécifique à la classe dérivée.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Pourquoi fais tu un delete sur P? A partir du moment où tu l'as transféré dans ta classe conteneur, son cycle de vie est supposé être correctement géré, alors pourquoi le détruire? Surtout qu'à moins que ton objet ne soit clonable, ta classe conteneur n'a aucun moyen de le dupliquer.

    Edit: ha oui, j'avais pas vu la copie par valeur

  4. #4
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    merci a vous, cependant ma liste chainée contient des pointeurs de la classe outilDessin et je possède également une focntion qui permet de cloner mon objet point mais j'ai déja tenter de le cloner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Point  P;
    P.ecritureEntree(entree);
    addObject(P.getCopy());
    mais toujours aucun résultat, la copie est perdu et je n'ai plus d'acces aux élements de ma liste : (
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ma liste chainée contient des pointeurs
    Ton code semble affirmer le contraire.

  6. #6
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    En effet je passe l'objet lui meme en paramètre mais je recupere son adresse de toute facon la classe outilDessin étant abstraite je ne peux que travailler avec des pointeurs sur ma liste chainée.
    Le probleme vient du fait que la mémoire attribuée à l'objet instancié (d'une classe fille) et désalloué lorsque je sors de ma fonction et donc le programme plante si j'essai d'accéder à ses données qui ont était perdu.
    J'ai pensé à créer une classe chargement qui permetrait de sauvegarder ces objets en mémoire mais j'esperais trouver un moyen plus "propre" ou efficace si possible.
    Merci pour vos réponses si quelqu'un trouve une solution je suis tout ouïe ; )
    @bientot
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    On peut voir la fonction addObject ?

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

Discussions similaires

  1. [MFC] CSocket | perte de données
    Par Grey dans le forum MFC
    Réponses: 2
    Dernier message: 24/11/2005, 10h14
  2. Perte de donnée
    Par spikto dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2005, 16h03
  3. Perte de données Firebird
    Par jeanafond dans le forum Débuter
    Réponses: 8
    Dernier message: 19/05/2005, 10h21
  4. Crash InnoDB,perte de données définitives... Info ou Intox ?
    Par Alexandre T dans le forum Administration
    Réponses: 3
    Dernier message: 17/01/2005, 10h44
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37

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