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 :

un autre problème de crash


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Par défaut un autre problème de crash
    salut,

    mon programme choisie un module aléatoirement dans un fichier xml et le charge.
    ensuite, j'aimerai récupérer la position de plusieurs bones du module et j'arrive à récupérer la position d'un bone mais pas de plusieurs de manière récursive.

    mon code pour récupérer la position d'un bone, qui compile et fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            moduleNode=my_scene->CreateChild("module");
            moduleNode->SetPosition(Vector3(0,0,0));
            AnimatedModel* moduleObject=moduleNode->CreateComponent<AnimatedModel>();
            moduleObject->SetModel(cache->GetResource<Model>(modulePath));
            moduleObject->SetMaterial(cache->GetResource<Material>(moduleTexturePath));
            exit1=moduleNode->GetChild("exit1", true);
            exit1Pos=exit1->GetWorldPosition();
            exit1PosX=exit1Pos.x_;
            exit1PosY=exit1Pos.y_;
            exit1PosZ=exit1Pos.z_;
    mon code pour récupérer plusieurs positions afin de les stocker, qui compile mais crash l'application comme indiqué dans les commentaires :
    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
     
            moduleNode=my_scene->CreateChild("module");
            moduleNode->SetPosition(Vector3(0,0,0));
            AnimatedModel* moduleObject=moduleNode->CreateComponent<AnimatedModel>();
            moduleObject->SetModel(cache->GetResource<Model>(modulePath));
            moduleObject->SetMaterial(cache->GetResource<Material>(moduleTexturePath));
            //
     
     
            for(listNumber=0;listNumber<exits;listNumber++)
            {
                std::string exit = ("exit");
                {
                    std::ostringstream ss;
                    ss<<listNumber;
                    std::string s(ss.str());
                    exit.append(s);
                }
                const char* exitX = exit.c_str();
     
                Node* exitNode = moduleNode->GetChild(exitX, true);  // this one works
     
                //Vector3 exitPos= exitNode->GetWorldPosition();   //not this one, compile but crash the app
     
                //float exitPosX=exitPos.x_;
                //float exitPosY=exitPos.y_;
                //float exitPosZ=exitPos.z_;
     
            }
    quelqu'un peut me dire ce qui cloche ?

    merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Par défaut
    j'ai lancer mon application avec la console pour voir si elle m'affichait un message d'erreur avec le crash et j'ai eu ceci :
    Erreur de segmentation (core dumped)
    et avec le debugger, il me dit ça :
    Program received signal SIGSEGV, Segmentation fault.
    0x00000000006fe522 in Urho3D::Node::GetWorldPosition (this=0x0)
    at /home/noname/Documents/urho3D_build/include/Urho3D/Scene/../Scene/Node.h:350
    350 if (dirty_)
    quand je regarde mon code, j'me dis que ça vient de mon initialisation du node, peut-être je devrais faire comme pour moduleNode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moduleNode=my_scene->CreateChild("module");
    j'essayerai demain.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Salut,

    le debugger indique l'erreur 0x00000000006fe522 in Urho3D::Node::GetWorldPosition (this=0x0) ton this est NULL, le seul appel que tu as est sur exit1 donc ton exit1 est NULL. moduleNode->GetChild("exit1", true); retourne donc un NULL, surement qu'aucun child exit1 n'existe dans ton moduleNode.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Par défaut
    ben c'est ça le truc, c'est que si j'utilise la méthode avec exit1, ça marche bien, c'est pour ça que je ne comprends pas.
    le crash se produit quand j'utilise la méthode avec exitX et que //Vector3 exitPos= exitNode->GetWorldPosition(); n'est plus commenté.



    j'ai essayé différentes initialisations pour le node sauf celle ci pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exitNode=my_scene->CreateChild("exitNode");
    exitNode->SetPosition(Vector3(0,0,0));
    comme pour le moduleNode en fait.

    j'essayerai demain parce qu'à chaque fois il faut que je switch entre windows et linux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Par défaut
    c'est bon j'ai compris en fait.
    déjà, je n'ai pas tenté de réinitialisé mon node comme j'ai dit parce que ça voulait dire que je le crée alors qu'il existe déjà et mon problème venait de for (listNumber=0;listNumber<exits;listNumber++).
    mon exit1 existe mais pas exit0... ><
    si je mets for(listNumber=1;listNumber<exits;listNumber++) ça marche sans problèmes.

    merci pour la réponse.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Par défaut
    je suis retombé sur un autre problème assez similaire.
    disons que j'ai réussi à stocker mes positions dans un tableau. je compile, je lance et en fait, mon application crash quand c'est le deuxième module qui est choisi et ne crash pas quand c'est le premier module qui est choisi donc je ne comprends pas parce que les deux modules sont fait de manière identique et exporté de la même manière aussi. la seul différences entre les modules, c'est que l'un a deux "exits" et l'autre en a quatre.

    le message du debugger :
    projet: /home/noname/Documents/urho3D_build/include/Urho3D/Engine/../Core/../Core/../Container/Ptr.h:92: T* Urho3D::SharedPtr<T>::operator->() const [with T = Urho3D::Scene]: Assertion `ptr_' failed.

    Program received signal SIGABRT, Aborted.
    0x00007ffff696fcc9 in __GI_raise (sig=sig@entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    56 ../nptl/sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.

    edit : le début de mon 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
     
    #include <Urho3D/Engine/Application.h>
    #include <Urho3D/Engine/Engine.h>
    #include <Urho3D/Input/InputEvents.h>
     
    #include <Urho3D/Core/CoreEvents.h>
    #include <Urho3D/Input/Input.h>
    #include <Urho3D/Resource/ResourceCache.h>
    #include <Urho3D/Resource/XMLFile.h>
    #include <Urho3D/IO/Log.h>
    #include <Urho3D/UI/UI.h>
    #include <Urho3D/UI/Text.h>
    #include <Urho3D/UI/Font.h>
    #include <Urho3D/UI/Button.h>
    #include <Urho3D/UI/UIEvents.h>
    #include <Urho3D/UI/Window.h>
    #include <Urho3D/Scene/Scene.h>
    #include <Urho3D/Scene/SceneEvents.h>
    #include <Urho3D/Graphics/Graphics.h>
    #include <Urho3D/Graphics/Camera.h>
    #include <Urho3D/Graphics/Geometry.h>
    #include <Urho3D/Graphics/Renderer.h>
    #include <Urho3D/Graphics/DebugRenderer.h>
    #include <Urho3D/Graphics/Octree.h>
    #include <Urho3D/Graphics/Light.h>
    #include <Urho3D/Graphics/Model.h>
    #include <Urho3D/Graphics/StaticModel.h>
    #include <Urho3D/Graphics/AnimatedModel.h>
    #include <Urho3D/Graphics/Material.h>
    #include <Urho3D/Graphics/Skybox.h>
    #include <Urho3D/UI/Window.h>
    #include <Urho3D/Math/Vector3.h>
     
     
    #include <string>
    #include <iostream>
    #include <sstream>
    #include <cstdlib>
    #include <time.h>
     
     
     
    //my stuff
    #include "tinyxml2.h"
    #include "fonctions.h"
     
    using namespace Urho3D;
    //using namespace std;
     
    class projet : public Application
    {
     
    public:
     
        //DEFINITION
        SharedPtr<Scene> my_scene;
        SharedPtr<Node> moduleNode;
        SharedPtr<Node> exitNode;
     
        Node* camNode;
     
        Window* window;
        Text* window_text;
     
     
        int modulesCount;
        int randomLine;
        std::string module;
     
        int moduleType;
        int exits;
        const char* modulePath;
        const char* moduleTexturePath;
     
        int listNumber;
     
            struct exitsStruct //is now a type
            {
            int exit_;
            float exitPosX;
            float exitPosY;
            float exitPosZ;
            bool isFree;
            };
     
        //int MODULE_COUNT;
        //int MODULE_MAX; 
     
     
     
     
     
        projet(Context* context) : Application(context)
        {
     
        }
     
        virtual void Setup()
        {
    	// See http://urho3d.github.io/documentation/1.32/_main_loop.html
    	engineParameters_["FullScreen"]=false;
            engineParameters_["WindowWidth"]=1280;
            engineParameters_["WindowHeight"]=720;
            engineParameters_["WindowResizable"]=true;
        }
     
        virtual void Start()
        {
     
            //secondary DEFINITION for no warning
            //listNumber = 0;
            struct exitsStruct exitList[listNumber];
     
            //MODULE_MAX = 10;
     
     
     
     
    	// We will be needing to load resources.
            // All the resources used in this example comes with Urho3D.
            // If the engine can't find them, check the ResourcePrefixPath. <-- where ?
            ResourceCache* cache=GetSubsystem<ResourceCache>();
     
    	// Let's setup a scene to render.
            my_scene=new Scene(context_);
            // Let the scene have an Octree component!
            my_scene->CreateComponent<Octree>();
            // Let's add an additional scene component for fun.
            my_scene->CreateComponent<DebugRenderer>();
    	// what the hell ?!
     
     
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //   loading a random module and list its exits
    ///////////////////////////////////////////////////////////////////////////////////////////////////
     
            //XML
            tinyxml2::XMLDocument modules;
            modules.Parse("Data/Scripts/Modules.xml");
            if(modules.LoadFile("Data/Scripts/Modules.xml") == tinyxml2::XML_NO_ERROR)
            {
                tinyxml2::XMLNode* root = modules.FirstChild();
                tinyxml2::XMLElement* infos = root->FirstChildElement("infos");
                infos->QueryIntAttribute("count", &modulesCount);
                randomLine = chooseRandomLine(modulesCount);
     
                module = ("module");
                {
                    std::ostringstream ss;
                    ss<<randomLine;
                    std::string s(ss.str());
                    module.append(s);
                }
                const char* moduleX = module.c_str();
     
                tinyxml2::XMLElement* randomModule = root->FirstChildElement(moduleX);
                randomModule->QueryIntAttribute("type", &moduleType);
                randomModule->QueryIntAttribute("exits", &exits);
                //faire une liste d'exit
     
                modulePath = randomModule->Attribute("path");
                moduleTexturePath = randomModule->Attribute("texturepath");
     
            }
     
    	// Let's put a module in there.
            moduleNode=my_scene->CreateChild("module");
            moduleNode->SetPosition(Vector3(0,0,0));
            AnimatedModel* moduleObject=moduleNode->CreateComponent<AnimatedModel>();
            moduleObject->SetModel(cache->GetResource<Model>(modulePath));
            moduleObject->SetMaterial(cache->GetResource<Material>(moduleTexturePath));
            //MODULE_COUNT=1;  //there is one module in the scene
     
            for(listNumber=0;listNumber<exits;listNumber++)
            {
                std::string exit = ("exit");
                {
                    std::ostringstream ss;
                    ss<<listNumber;
                    std::string s(ss.str());
                    exit.append(s);
                }
                const char* exitX = exit.c_str();
     
                exitNode = moduleNode->GetChild(exitX, true);  
     
                Vector3 exitPos= exitNode->GetWorldPosition();
     
                exitList[listNumber].exit_=listNumber;
                exitList[listNumber].exitPosX=exitPos.x_;
                exitList[listNumber].exitPosX=exitPos.x_;
                exitList[listNumber].exitPosX=exitPos.x_;
                exitList[listNumber].isFree=true;
            }

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2013, 15h01
  2. Réponses: 1
    Dernier message: 23/01/2013, 16h09
  3. Réponses: 2
    Dernier message: 21/10/2009, 17h51
  4. Réponses: 0
    Dernier message: 04/05/2008, 18h07
  5. Réponses: 4
    Dernier message: 12/04/2006, 20h25

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