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 :

Allouer classe ayant elle aussi des allocations


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut Allouer classe ayant elle aussi des allocations
    Bonjour a tous.

    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
     
    class CObjOBJ
     
    {
     
    public:
     
           CObjOBJ();
     
           void SetTexture(std::string filename);
           void SetBump(std::string filename);
     
           void Load(std::string filename);
           void Draw();
               ~CObjOBJ();
     
    private:
               void Init();
               GLuint texture,bump;
     
               ObjVertex *Vertex;
     
               ObjNormal *Normal;
     
               ObjTexCoord *TexCoord;
     
               ObjFace *Faces;
     
               int   nbVertices, nbNormals, nbTexCoords, nbFaces;
           GLuint MapList; //Display list
     
    };

    J'ai cette classe qui marche parfaitement lorsque je créer une instance statique.
    Mais lorsque que j'allou un tableau de cette classe dynamiquement j'obtient des erreurs a la fermeture de mon programme :
    ou un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    make: *** [x] Erreur de segmentation

    Lorsque je commente ces lignes, je n'ai aucune erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ObjVertex *Vertex;
    ObjNormal *Normal;
    ObjTexCoord *TexCoord;
    ObjFace *Faces;

    L'erreur de segmentation vient bien de la création du tableau d'objet, car meme si je n'appelle pas la fonction qui allou ObjVertex,ObjNormal etc sa plante.

    Merci de votre aide !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 419
    Par défaut
    ça ressemble à une erreur de taille quelque part...
    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.

  3. #3
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    J'ai viré tout le contenu de mes destructeur et je n'ai plus l'erreur, j'esssay surement de supprimer quelque chose qui n'a pas été allouer quelque part.
    Je continu de chercher !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 419
    Par défaut
    Tu initialises tes pointeurs dans le constructeur ?
    (au moins à NULL, si tu ne les alloues pas tout de suite).
    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é Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    Bon, j'ai mis mes pointeurs a NULL dans le constructeur et j'ai mis des conditions pour voir si elle sont différente de 0 dans le destructeur!
    Sa marche et sa marche aléatoirement :/!
    J'ai souvent ceci a l'ouverture du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [XT95@localhost test]$ make x
    g++ src/main.o src/gui.o src/WorldManager.o -o Embya -L/usr/lib -lSDL -lpthread -lxtEngine -lSDL_image -lSDL_ttf -lGL -lGLU -lGLEW -llua -ldl
    ./Embya
    nbObj : 2
    nbEntity : 2
    terminate called after throwing an instance of 'std::bad_alloc'
      what():  St9bad_alloc
    make: *** [x] Abandon
    Des fois sa m'affiche sa, des fois ca s'execute et sa ne m'affiche pas mes objets et des fois sa me les affichent :/ !

    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
     
     
    nbObj=0;
    nbEntity=0;
     
    while (!file.eof() )
    {
    file >> chaine;
    if(chaine == "LoadOBJ")
    {
    nbObj++;
    }
    if(chaine == "Obj:")
    nbEntity++;
    }
    objs = new CObjOBJ[nbObj];
    entObj = new CEntityOBJ[nbEntity];
    std::cout<<"nbObj : "<<nbObj<<std::endl;
    std::cout<<"nbEntity : "<<nbEntity<<std::endl;

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 419
    Par défaut
    Une exception bad_alloc signifie généralement "plus de mémoire".
    C'est à peu près l'équivalent de malloc() en C retournant NULL...

    Vu que je ne vois pas trop ce qui boufferait une énorme quantité de mémoire ici, je pense que tu tentes un new[] avec une quantité erronée...
    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.

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par lXT95l
    J'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	   nbVertices=0;
    	   nbNormals=0;
    	   nbTexCoords=0;
    	   nbFaces=0;
    Dans le constructeur et ca a l'air de marcher !!
    Citation Envoyé par Médinoc
    Tu initialises tes pointeurs dans le constructeur ?
    (au moins à NULL, si tu ne les alloues pas tout de suite).
    comme quoi la réponse était déjà donnée...
    ne pas oublier le tag résolu, merci

  8. #8
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    J'ai pas mis résolu car j'ai mis "ca a l'air de marcher" ^^
    Le programme s'ouvre bien, les objets, j'en vois deux sur quatres et a la fermeture du prog j'ai ca :
    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
     
    [XT95@localhost test]$ clear && make x
     
     
    g++ src/main.o src/gui.o src/WorldManager.o -o Embya -L/usr/lib -lSDL -lpthread -lxtEngine -lSDL_image -lSDL_ttf -lGL -lGLU -lGLEW -llua -ldl
    ./Embya
    nbObj : 5
    nbEntity : 4
    Vertex : 384 Normal : 384 TexCoords : 384 Faces : 400
    Vertex : 366 Normal : 366 TexCoords : 366 Faces : 424
    Vertex : 216 Normal : 216 TexCoords : 216 Faces : 236
    Vertex : 443 Normal : 443 TexCoords : 455 Faces : 618
    Vertex : 393 Normal : 393 TexCoords : 393 Faces : 256
    X Error of failed request:  GLXBadContext
      Major opcode of failed request:  144 (GLX)
      Minor opcode of failed request:  4 (X_GLXDestroyContext)
      Serial number of failed request:  43
      Current serial number in output stream:  45
    X Error of failed request:  BadWindow (invalid Window parameter)
      Major opcode of failed request:  4 (����stroyWindow)
      Resource id in failed request:  0x400000f
      Serial number of failed request:  132
      Current serial number in output stream:  134
    make: *** [x] Erreur de segmentation
    De plus, j'avais mis les pointeurs a NULL comme Médinoc me l'avais dit

    EDIT : Résolu Merci beaucoup Médinoc.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/01/2015, 14h23
  2. Réponses: 7
    Dernier message: 01/01/2010, 09h31
  3. Faire communiquer des classes entre elles?
    Par aurelie689 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/05/2009, 12h46
  4. Utilisation des classes entre elles
    Par leodi dans le forum Flash
    Réponses: 1
    Dernier message: 17/05/2008, 17h20
  5. Gestion des classes entre elles et organisation.
    Par Hybrix dans le forum Développement 2D, 3D et Jeux
    Réponses: 54
    Dernier message: 29/08/2007, 20h54

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