Probleme avec new() non crée pour certaine valeur...

Signaler
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Bonjour,

J'ai un probleme qui est apparu de je ne sais ou alors que ca marchais avant une certain modif que je vais expliquer.
J'ai des classes:
class VERTEX                            // Build our Vertex Class
{
public:
    GLfloat pt[12];                        // 3D coordinates x, y
                                        // hauteur
};

// CLASS GROUPANT LES 4 SOMMETS DE LA FACE
class QUAD                                // Build our Quads Structure
{
public:
    int num_pts;
    bool visible;
    int type;
    GLdouble* bottom;
    GLfloat* top;
    VERTEX* vertex;
    int symbole;           
};                                   

// CLASS D'UN COUCHE
class LAYER                                // Build our LAYER Class
{
public:
    int num_quads;
    bool visible, existe;
    float hauteur, zstart, h, penetration;
    char* nom_cif;
    char* nom_couche;
    vec4 color;
    QUAD* quad;   

    LAYER()
    {
        this->num_quads=0;
        this->zstart = 3.0;
        this->hauteur = 2.0;
        this->h = 5.0;
        this->color.set(0, 0, 0, 1.0);
        this->visible=true;
        this->nom_cif = ";";
        this->nom_couche = ";";
    }
  
    void Del(int _num)
    {
        delete this->quad;
        this->num_quads=0;
        this->quad = new QUAD[_num];
    }

    ~LAYER()
    {  }
};

struct SYMBLAYER
{
    int numquads;
};

struct SYMBDS
{
    SYMBLAYER layer[13];
};

extern SYMBDS* SymboleDS;
extern LAYER* LLayer;

et je fais ensuite:
LAYER* LLayer = new LAYER[13]();
SYMBDS* SymboleDS;

LAYER correspond a 13 couches que je veux ensuite dessiner en OpenGL,
SYMBDS correspond a un tableau qui me sert a enregistrer des symboles avec leur nombre de quad par couche lu dans un fichier (un fichier CIF pour les masque de circuit integre),
Le nombre total de quad a dessiner pour chaque LLayer est enregistré dans un tableau TabTest[13], je veux donc une fois que je sais combien de quads je dois créer par LLayer... bah les créer;

                for(int c=0; c<13; c++)
                    {
                        int createquads = TabTest[c];
                        if(LLayer[c].num_quads>0) // condition au cas ou un fichier CIf avait deja été chargé et quon veut en voir un nouveau.
                            LLayer[c].Del(createquads);
                        else
                            LLayer[c].quad = new QUAD[createquads];
                    }

Bizzarement si createquads
est supérieur a 35, mon nouveau QUAD n'est pas créé! new() me renvoie 0!
inferieur a 35 c'est bon!

Pourquoi? D ou peut venir le probleme?

Merci pour votre aide.

9 réponses

Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

PS:

Si je met en commentaire les structures pour les symboles et tous ce qui concerne ces structure dans mon code... bah la mon new marche!
en tout ca new me créer sans prob des quads de taille 200000... j'ai pas testé la limite, mais en tout cas 2000000000 ne marche pas!

Une idée d'ou vient mon probleme et comment le resoudre? mes tableaux peuvent avoir une dimension enorme du style de 500000! bon apres mon OpenGL laggera grave mais bon...

Merci,

Jojo
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Ta classe Quad contient des pointeurs. Tu dois au moins définir un constructeur pour la classe Quad pour initialiser ces pointeurs.
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

il le sont en temps voulu, car ca depend encore des valeurs lu!

Une fois qu'il a lu une fois le fichier pour voir combien de quad
dessiner pour chaque couche, il relis le fichier, et des qu'il a un
objet a dessiner (rectangle, polygon, ...) il créé un nouvel objet
bottom par exemple avec le nombre de coordonnée correspondant a l
element a dessiner, et ainsi de suite.


bottom, top peuvent avoir une dimension de 12 comme de 80 dependant du nombre de sommet du polygon
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

le probleme ne survient que quand j'ai mes structure, je pourrai les remplacer par un tableaux a 3 dimensions!

mais comment faire?

J'ai essayé en declarant

int * TabSymb[13][1];


puis a l endroit ou je dois le créer j'ai mis:


TabSymb = new int[numds][13][1];

mais ca ne fonctionne pas!
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Pour instancier un tableau d'objets il faut suivre cette démarche essaye de t'inspirer:

ClasseA * array;

array = new ClasseA [15];
for (int i=0; i<15; i++) {
    array [i] = new ClasseA ();
}
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

Proleme à l'air resolue pour le moment en utilisant un tableau a 3 dim!
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Espérant. Mais ça l'air de devenir de plus en plus compliqué ....
Messages postés
136
Date d'inscription
samedi 1 mai 2004
Statut
Membre
Dernière intervention
26 mai 2007

C'est effectivement un program assez complexe que je dois developper :S

Merci pour ton aide!
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Juste un conseil: "Il ne faut pas compiquer les choses sinon on risque de s'ennuir"