Access violation reading [Résolu]

Signaler
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013
-
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013
-
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

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
18
Verifier que m_bbox2 sont allouer avec un new

et avait de faire m_bbox2 tu fait un if(m_bbox2 != NULL)++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
18
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


++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
18
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


++
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013

Tutafais j'avais initialisé l'objet pas dans la bonne classe :oops:

Merci!