Access violation reading

Résolu
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013 - 14 août 2006 à 09:42
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013 - 16 août 2006 à 10:25
Bonjour!


Je travail sur un Plug In pour OpenSteer (un gestionnaire d'ia
multiples) et j'ai crée un jolie rectangle et j'aimreais savoir quand
mes agents sont dedans, mais la comparaison de ces vecteurs fait
planter le programme. Il n'y aucune erreur à la compilation, et le
programme se lance normalement.


Voila un extrait du code afin de clarifier ma demande :


L'objet box :


class Box{

public:

    Box(Vec3 &min, Vec3& max): m_min(min), m_max(max){}

    Box(Vec3 min, Vec3 max): m_min(min), m_max(max){}

    bool    InsideX(const Vec3 p){if(p.x
< this->m_min.x || p.x > this->m_max.x)   
    return false;return true;}

    bool    InsideZ2const Vec3 p){if(p.z
< this->m_min.z || p.z > this-> m_max.z)   
return false;return true;}

    void    draw2(){

        Vec3 b,c;

        b = Vec3(m_min.x, 0, m_max.z);

        c = Vec3(m_max.x, 0, m_min.z);

        Vec3 color(1,1,0);

        drawLineAlpha(m_min, b, color, 1.0f);

        drawLineAlpha(b, m_max, color, 1.0f);

        drawLineAlpha(m_max, c, color, 1.0f);

        drawLineAlpha(c,m_min, color, 1.0f);

    }

    Vec3 m_min;

    Vec3 m_max;

};


l'erreur arrive quand j'appel la fonction insidex dans une autre class (l'agent) :


int update (const float currentTime, const float elapsedTime)

    {

[...]

        m_bbox2->InsideX(position());

[...]

}


Pouvez m'aidez?

Merci!

6 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 24
14 août 2006 à 15:05
Verifier que m_bbox2 sont allouer avec un new

et avait de faire m_bbox2 tu fait un if(m_bbox2 != NULL)++
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 août 2006 à 15:22
if (pointeur != NULL)

Oui si on l'a initialiser à 0 quelque part. Mais si il n'est pas initialisé:

char *test;

seul par exemple, il pointera sur sa zone mémoire.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solutionhttp://programmationdebat.discutforum.com
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 24
14 août 2006 à 15:11
Oups j'ai fais des fautes.

Je voulais dire qui faut que m_bbox2 soit alloué avec un new, car c'est un pointeur qui pointe n'importe où au depart.

Et avant d'utiliser un pointeur, normalement il faut verifier qui ne
pointe pas sur rien, donc faire un if (pointeur != NULL) avant
utilisation


++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 août 2006 à 15:27
Oups petite erreur. Il ne pointera pas sur sa zone mémoire mais la valeur ne sera pas valide tout de même.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solutionhttp://programmationdebat.discutforum.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 24
14 août 2006 à 15:28
Oui, c'est vrai, mais normalement, on iniitialise
toujours un pointeur avec NULL, ou avec une allocation dymanique. Dans
le cas de sran_isback, l'erreur vient surement d'un initialisation non
faite


++
0
sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013
16 août 2006 à 10:25
Tutafais j'avais initialisé l'objet pas dans la bonne classe :oops:

Merci!
0
Rejoignez-nous