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

Langage C++ Discussion :

Allocation dynamique dans une fnc et passage par adr


Sujet :

Langage C++

  1. #1
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut Allocation dynamique dans une fnc et passage par adr
    Bonjour,
    voilà je bute sur un problème d'allocation dynamique dans une fonction et je ne trouve pas de solution simple.
    Il s'agit de passer un pointeur à une fonction (passage par adr), et la fonction devra, après un certain traitement, me créer une instance d'un objet convenablement initialisée.
    Le problème c'est qu'il me semble que bien que mon objet (dans la fonction) soit alloué dynamiquement via "new", il est détruit à la sortie (en tout les cas ce n'est pas le bon objet que je reçoit).

    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
    32
     
    #include <iostream>
     
    using namespace std;
     
    class Point
    {
    public:
        Point(){x = -1; y=-1;}
        Point(int pX, int pY){x = pX; y=pY;}
        void dump(){cout << "X: " << x << " Y: "  << y << "\n";}
     
        int x, y;
    };
     
    void modify(Point* pt)
    {
        pt = new Point(99, 88);
    }
     
    int main()
    {
        Point p1;
     
        Point* p2;
     
        p1.dump();
     
        modify(p2);  // ** devrait instancier p2 avec x=99 et y = 88
        p2->dump();  // au lieu de x:99,y:88 j'ai n'importe quoi
        return 0;
    }
    Si quelqu'un pouvait m'expliquer comment ce genre de problème est réglé en C++ j'en serait très reconnaissant. J'ai beau revoir tous mes livres et toutes les explication sur le passage des objets en paramètre, sur l'allocation d'objet (statique et dynamique), sur les opérateurs new ... bref je trouve pas de solution.
    PS. Il est à noter que je **NE** veut **PAS** recevoir mon objet en valeur de retour de la fonction ... je veux le passer via un pointeur que je puisse modifier (en fait le code que je viens de poster est une simplification extrême d'un gros pb dans lequel je ne fais pas que instancier l'objet).

  2. #2
    Invité
    Invité(e)
    Par défaut
    Quand tu passe le pointeur, tu le copie. Pour pouvoir modifier le pointeur original il faut soit passer par une reference de pointeur (ce que je conseille) soit par un pointeur de pointeur. Et n'oublie la gestion de la mémoire !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void modify(Point*& pt)
    {
        pt = new Point(/* tes valeurs */);
    }
    EDIT : D'ailleurs ton code aurait du crashé avec un message du genre Segmentation Fault

  3. #3
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Bonjour Joe Dralliam,
    je vois maintenant, je vais voir (en effet je vais utiliser plutôt une réf de ptr).
    Pour le crash, mon code initial en effet crashait. Pour ce qui est de la gestion correcte de la mémoire (libération et autre) en fait je les fais correctement, le bout de code que j'ai posté est vraiment très crad, mais je voulais retirer un max de chose pour ne montrer que l'essentiel du problème.
    Mon code initial est en fait un parseur d'expressions mathématique, qui utilise la méthode de la descente récursive (recursive descent parser) et qui donc récursivement me retourne des ASTNodes qui ont pour sommet une opération et pour opérande un item qui peut être une ASTvar, ASTconst, ou bien même un autre ASTNode, chaque ASTNode possédant un Left et Right qui eux même sont du type ASTNode.
    Je passe des pointeurs à mes fonctions de parsing récursives, et en fonction du résultat du parsing elles doivent instancier le bon type d'ASTNode, et donc j'avais besoin de passer mes ASTNodes en param à mes fonctions (avec d'autres param qui contiennent les infos de context).

    Je vais essayer de passer par les réf de pointeurs.
    Merci.

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

Discussions similaires

  1. Allocation dynamique dans une subroutine
    Par Kaluza dans le forum Fortran
    Réponses: 1
    Dernier message: 05/05/2011, 17h53
  2. Allocation dynamique dans une fonction
    Par Kaluza dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2011, 10h23
  3. allocation dynamique dans une structure !
    Par grodashe dans le forum C
    Réponses: 2
    Dernier message: 31/12/2009, 11h17
  4. Allocation dynamique dans une fonction
    Par n0mad dans le forum Débuter
    Réponses: 5
    Dernier message: 05/02/2009, 22h42
  5. [D7] - Allocation dynamique dans une DLL
    Par david_chardonnet dans le forum Delphi
    Réponses: 6
    Dernier message: 05/07/2006, 15h28

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