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

Ogre Discussion :

Heap Corruption Detected à la fermeture du programme


Sujet :

Ogre

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut Heap Corruption Detected à la fermeture du programme
    Bonjour,

    je développe actuellement un petit jeu vue à la 3ième personne et j'ai un problème lors de la fermeture de l'application, et apparemment celà viendrait de la caméra. J'ai donc créé une classe ThirdPersonCamera qui hérite de Ogre::Camera, et je lui ai ajouté une méthode setTarget(Ogre::SceneNode *movableTarged) afin d'indiquer à la caméra quel node elle doit suivre du regard (le personnage, car la caméra sera fixe en intérieur, elle ne fera que regarder toujours vers le joueur), et j'appelle ensuite une méthode update() afin d'actualiser la position de la cible de la caméra en fonction de la position du node. Le problème survient quand j'appuye sur la touche échap qui va terminer l'application en renvoyant false à frameStarted(), j'obtiens une erreur Heap Corruption Detected. CRT detected that the application wrote to memory after end of heap buffer. Après plusieurs essais j'ai remarqué que celà n'arrive que lorsque j'ai appelé la méthode setTarget(). Voici le code :

    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
    #include "ThirdPersonCamera.h"
     
    ThirdPersonCamera::ThirdPersonCamera(const Ogre::String name, Ogre::SceneManager *sceneMgr) : Ogre::Camera(name, sceneMgr)
    {
    	mMovableTarget = NULL;
    }
     
    void ThirdPersonCamera::setTarget(Ogre::SceneNode *node)
    {
    	mMovableTarget = node;
    }
     
    void ThirdPersonCamera::update()
    {
    	//Oriente la caméra vers la cible
    	lookAt(mMovableTarget->getPosition());
    }
    Quelqu'un aurait-il une idée ?

    Merci

  2. #2
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    comment créer tu ta camera?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut
    Je la crée comme ceci (mCamera est de type ThirdPersonCamera *)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mCamera = static_cast<ThirdPersonCamera*>(mSceneMgr->createCamera("Camera1"));
    Je n'ai pas trouvé d'autre moyen, a moin de surcharger la méthode createCamera() ?

  4. #4
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    Je vois pas trop comment sa peu marcher...essay avec dynamic_cast,sa devrais planter a la création de la camera.Parce que la tu alloue un bloc de taille "camera",pas plus(ou alors je comprens rien au static_cast^^),et donc quand tu appelle tes fonctions,tu ne lis pas dans un endroit alloué par le programme.(static_casr n'alloue pas de mémoire)

    Et au passage comment détruit tu ta camera?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut
    Merci pour ta réponse.

    Je pense avoir compris, étant donné que je n'alloue qu'un bloque Camera, le SceneNode mMovableTarged n'est probablement pas initialisé correctement en mémoire, et ça doit être pour ça. Je vais me débrouiller pour la construire autrement.

    Sinon pour la destruction de l'objet, elle se fait à la fin de l'exécution du programme, je ne l'appelle pas directement (c'est quand ça plante).

  6. #6
    Membre confirmé
    Avatar de gusgus
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 500
    Points : 641
    Points
    641
    Par défaut
    Ta classe devrait contenir un pointeur vers Camera a mon avis.

  7. #7
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Cet article montre comment utiliser une caméra type 3ème personne; tu devrais pouvoir y trouver des infos intéressantes (je pense par exemple au destructeur et à l'instanciation éventuelle de la caméra)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 117
    Points : 76
    Points
    76
    Par défaut
    Merci pour vos réponses à tous les deux, vous m'avez bien aidé

    Je n'avais absolument pas pensé à une possibilité d'utiliser un pointeur vers Ogre::Camera dans ma classe, je n'avais en tête que l'héritage. Je vais pouvoir faire un code beaucoup plus robuste ^^

    Merci encore.

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

Discussions similaires

  1. "heap corruption detected" sur desallocation de tableau de pointeurs
    Par app25 dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 16/07/2009, 17h33
  2. HEAP CORRUPTION DETECTED
    Par li_causi dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2008, 22h44
  3. Réponses: 7
    Dernier message: 12/10/2005, 09h19
  4. Réponses: 7
    Dernier message: 24/01/2005, 11h36
  5. Detecter la fermeture d'une fenetre MsDos
    Par Akta3d dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/07/2004, 16h53

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