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 :

Probleme d'allocation de memoire, listchainee


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Par défaut Probleme d'allocation de memoire, listchainee
    Salut,
    J'ai fait un programme visant a créer des lacets pour une recherche mathématique. le lacet est cree a partir de ligne chainee, j'ai un probleme d'allocation car dans l'un de mes constructeur Ligne(Lacet*,Ligne* pP,Ligne* pS,int). Il me donne une adresse de memoir deja allouer par cette meme fonction cette addresse est en locurence l'element precedent de la nouvelle ligne. En gros c'est ca :

    Ligne* tmp;
    tmp = new Ligne(&Lacet,NULL,NULL,1); // cree le premier element donne une adresse 0x35750
    tmp = new Ligne(&Lacet,tmp ,NULL,1);// deusieme element, me donne une adresse 0x35750

    ca fait le deusieme fois que je rencontre ce probleme.
    je n'utilise pas de librairy de debugage particulaire car la derniere que j'ai utilisier generai des erreurs

    +++++++++++++++++++++++++++++++++
    Ligne(&pLacet,NULL,NULL,xT);
    Ligne::Ligne(0x351f8, 0, 0, -2)
    donne : 0x35750
    Ligne::Ligne(0x351f8, 0x35750, 0, 2)
    donne : 0x34ea8
    Ligne::Ligne(0x351f8, 0x34ea8 ,0, -3)
    donne : 0x34ea8
    Ligne::Ligne(0x351f8, 0x34ea8, 0, -5)
    donne : 0x35750
    ++++++++++++++++++++++++++++++++

    je ne sais pas si ca vien de passage d'argument par valeu plustot que par reference ou qq chose d'autre.

    Merci,

  2. #2
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Tu pourrais nous montrer le code du constructeur de Ligne ?

    C'est assez etrange je trouve. Sans plus de code je vois pas...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Par défaut
    mon constructeur de Ligne est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Ligne::Ligne(Lacet* pL,Ligne* pP,Ligne* pS,int L)
    {
    pOwner = pL;
    pPrecedent = pP;
           if(pPrecedent!=NULL)
                  pPrecedent->pSuivant = this;
    pSuivant = pS;
           if(pSuivant !=NULL)
                  pSuivant->pPrecedent= this;
    Longueur = L;
    // d'autre variable sont initaliser ici
    }
    Cette class support une fenetre windows.
    le probleme est que ce constructeur marche bien dans certaine fonctions.
    je veux bien mettre mon code source mais je suis tres mauvai a mettre des commantaire sur mon code. Enfin ce pb se passe que dans une certaine fonction. je mettre mon code se soir si ca vous dit.
    Merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Déjà un conseil: Avant d'écrire dans pPrecedent->pSuivant et Suivant->pPrecedent, vérifie qu'ils ne pointent pas déjà sur quelque chose.
    Et décide d'une politique à adopter si c'est le cas:
    • Gueuler systématiquement,
    • OSEF,
    • Faire une exception si pPrecedent et pSuivant pointent l'un sur l'autre pour s'insérer entre les deux, gueuler dans tous les autres cas,
    • etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Par défaut
    Salut, Médinoc
    Vraiment dsl mais j'ai du mal a te comprendre sur
    * Gueuler systématiquement,
    * OSEF, // surtout ici
    * Faire une exception si pPrecedent et pSuivant pointent l'un sur l'autre pour s'insérer entre les deux, gueuler dans tous les autres cas,
    * etc.

    et je ne vois pas pourquoi je testerai si il pointe sur qq chose car c'est le constructeur donc 'est peut-etre possible qu'il pointe sur qq chose mais la plus part du temps c'est des adresses de memoire invalide, enfin je pense, comme quand des fois la variable prend un valeur bizard a la decaration car elle occupe un espace de memoire qui n'a pas ete initiliser a une valeur.

    Enfin je poste mon code Bonne chance et merci a ceux qui le regarderons.

    Donc la fonction ou le constructeur plante est dans la fichier GridFunctions.cpp a la ligne 613. Prenez le temps de ragrder le prog et dit moi ce que vous pense du coding, je sais que il y a plien de chose a ameliorer.
    je code sous Dev-C++ .
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Je parle de tester les pointeurs des objets qu'on passe au constructeur.
    En clair, je conseillais de vérifier s'ils n'étaient pas déjà attachés à d'autres objets...

    Les différents choix possibles sont simples:
    • Soit on lance une exception si les objets sont déjà attachés à quelque chose...
    • Soit on s'en fout et on écrase,
    • Soit on s'en fout mais on détache proprement l'autre objet,
    • Soit on lance une exception seulement si on ne peut pas s'insérer entre les deux...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Probleme d'allocation memoire
    Par kimikimi dans le forum C
    Réponses: 2
    Dernier message: 05/04/2011, 10h55
  2. Probleme d'allocation memoire
    Par jkofr dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 22/01/2010, 00h53
  3. Problem avec JOGL et allocation de memoire.
    Par goast dans le forum 3D
    Réponses: 1
    Dernier message: 13/02/2009, 20h18
  4. Probleme d'allocation memoire et free()
    Par Darksnakes dans le forum Débuter
    Réponses: 6
    Dernier message: 19/03/2008, 18h53
  5. Problèmes d'allocation memoire
    Par nina2007 dans le forum Linux
    Réponses: 0
    Dernier message: 16/08/2007, 16h19

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