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

jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007 - 10 nov. 2006 à 17:45
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 10 nov. 2006 à 21:04
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

jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
10 nov. 2006 à 17:57
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
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 20:32
Salut:

Ta classe Quad contient des pointeurs. Tu dois au moins définir un constructeur pour la classe Quad pour initialiser ces pointeurs.
0
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
10 nov. 2006 à 20:39
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
0
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
10 nov. 2006 à 20:43
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!
0

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

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 20:54
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 ();
}
0
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
10 nov. 2006 à 20:54
Proleme à l'air resolue pour le moment en utilisant un tableau a 3 dim!
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 21:00
Salut:

Espérant. Mais ça l'air de devenir de plus en plus compliqué ....
0
jojomillenium Messages postés 136 Date d'inscription samedi 1 mai 2004 Statut Membre Dernière intervention 26 mai 2007
10 nov. 2006 à 21:02
C'est effectivement un program assez complexe que je dois developper :S

Merci pour ton aide!
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 21:04
Salut:

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