#1 

09-01-2010 13:53:59

Mat3910
Membres
Date d'inscription:
Messages: 1
IP: 93.10.252.237
Courriel

Bonjour, j'ai un petit programme avec un vaisseau, j'ai une fonction pour le faire avancer : quand je compile, il marche. Seulement quand je lance le programme, pour tester, il y un message d'erreur.

"Irrlicht.exe à rencontré un problème..."

Après il demande "envoyer" ; "ne pas envoyer". (J'ai envoyé ; J'déconne !)

Alors je sais pas trop quoi faire, je pense que c'est irrlicht qu'est pas bon, mais je me doute que c'est aussi moi qui ai fait une mauvaise manip.
voila le code de ma classe.

le .cpp

#include "Vaisseau.h"

Vaisseau::Vaisseau(irr::scene::ISceneManager *sceneManager)
{
    m_position.X = 0.0f;
    m_position.Y = 1000.0f;
    m_position.Z = 40.0f;

    irr::scene::IAnimatedMesh* modele = sceneManager->getMesh("vaisseau.3ds");
    irr::scene::IAnimatedMeshSceneNode* m_Nvaisseau = sceneManager->addAnimatedMeshSceneNode(modele);
    m_Nvaisseau->setPosition(m_position);
}

void Vaisseau::avance()
{
    m_Nvaisseau->setPosition(m_position);
}

et le .h
#ifndef VAISSEAU_H_INCLUDED
#define VAISSEAU_H_INCLUDED

#include <IRR/irrlicht.h>

class Vaisseau
{
    public:
    Vaisseau(irr::scene::ISceneManager *sceneManager);
    void avance();

    private:
    //Le modele qu'on va controler.
    irr::scene::IAnimatedMeshSceneNode *m_Nvaisseau;
    irr::core::vector3df m_position;
};

#endif // VAISSEAU_H_INCLUDED

J'ai tout essayé, mais le fait de toucher à m_Nvaisseau dans une autre méthode que le constructeur génère une erreur quand le programme se lance. Pourtant à la compilation, il ne dit rien.


Hors ligne


#2 

09-01-2010 14:21:31

TUpac
Membres
Avatar de TUpac
Date d'inscription:
Messages: 387
IP: 80.13.52.19
Courriel

Désolé mais tu ne pourrais pas lancer un débug pour trouver la ligne qui pose problème? Car un rapport d'erreur grosoft ne donne pas d'infos sur ton plantage ...


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#3 

09-01-2010 14:48:40

Ilovechocolat
Membres
Date d'inscription:
Messages: 125
IP: 83.113.157.17
Courriel

A tu bien mis tes dll dans le dossier de l'exécutable, pareil pour tes modèles et textures ?
Sinon, tu doit stocker tes objets dans des variables et non des pointeurs (sauf si tu utilise l'allocation dynamique).
par exemple si tu a une fonction qui fait.

Vaisseau* declarerVaisseau ();
{
    Vaisseau test;
    return &test;
}

et que lors de l'appel de la fonction tu fait
Vaisseau* pointeur = declarerVaisseau ();

ça peut provoquer ce type d'erreur car test est désaloué a la fin de la fonction.

Dans ce cas la une solution serait de faire :
Vaisseau declarerVaisseau ();
{
    Vaisseau test;
    return test;
}

Vaisseau objet = declarerVaisseau ();

ou

Vaisseau* declarerVaisseau ();
{
    Vaisseau* test = new Vaisseau;
    return test;
}

Vaisseau* pointeur = declarerVaisseau ();

si tu fait comme ça, pense a libérer la mémoire :
delete pointeur;


Hors ligne


#4 

09-01-2010 20:24:25

X3liF
Membres
Date d'inscription:
Messages: 19
IP: 84.101.239.36
Courriel

je pencherai sur un pointeur null pour que ca arrive si soudainement ^^

tu es sur que ton constructeur ne plante pas? car si la ligne

m_Nvaisseau->setPosition(m_position);

passe dans le constructeur je ne vois pas ce qui empecherai cette meme ligne de fonctionner dans une autre méthode....

si dans le setPosition tu mets :
 void Vaisseau::avance()
{
    if( m_Nvaisseau == NULL )
    {
          printf( "Vaisseau::avance() - m_Nvaisseau est NULL" );
          return;
    }

    m_Nvaisseau->setPosition(m_position);
}

ensuite est tu au courant que cette méthode ne fera jamais avancer ton vaisseau car tu ne modifies jamais sa position?


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
567 invités en ligne
membre en ligne: -
RSS Feed