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

C++ Discussion :

Creation de gros tableau


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut Creation de gros tableau
    Bonjour à tous.

    J'aimerais savoir s'il existe une manière propre de créer des (très) gros tableau et/ou de surveiller la mémoire. Faut-il allouer de la mémoire au démarrage du programme? (je développe en C++ depuis quelques années pour mon plaisir, ce qui signifie que je comprend bien le language, mais aussi que j'ai de grosse lacune sur les points auxquels je ne me suis pas encore confronté).

    Je m'explique:
    Je crée un petit programme sous DirectX et je remarque que mon application plante soit quand je crée plusieurs fois des petits tableaux (bien qu'ils sont censés être détruits avant d'en recréer un autre), soit quand j'en crée des grands.

    Me donner des pistes à explorer devrait être suffisant.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Petite précision:
    je soupçonne fortement que c'est un tableau de struct qui genère ce plantage.
    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
     
    struct TVertexBuffer
    { float X, Y, Z;
       float nX, nY, nZ;
       float texX1, texY1;
       float texX2, texY2;};
     
    ...
     
    unsigned int TailleVB = ???
    TVertexBuffer VB = new TVetrexBuffer[TailleVB];
     
    ...
     
    delete[] VB;
    Si TailleVB=128*128, et que je fait ce code plusieurs fois, j'ai un plantage.

    PS: je dit cela sans vraiment être sur... Mon ordi perso n'est pas celui sur lequel je suis en ce moment. Je vérifierais ce soir.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Y a pas de quoi exploser la mémoire avec un tableau de 128x128 sommets de 10 floats (ça fait 640 Ko).

    Tu as peut-être une fuite mémoire qui s'accumule au fur et à mesure. Pour éviter ce genre de problèmes tu peux utiliser std::vector pour les tableaux dynamiques.

    Est-ce que tu es sûr que ce n'est pas au niveau de la mémoire vidéo que ça sature ? Tu as débogué pour voir d'où venait le plantage ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Je me suis mal exprimé...

    Pour ces petits tableaux, il n'y a pas de plantages du premier coup. Je charge mon fichier qui remplit ce tableaux, je travaille, je recharge un autre fichier, je travaille ......... je recharge, je travaille, je recharge et ça plante.
    Par contre ça plante tout de suite si j'utilise des gros fichiers.

    Est-ce que tu es sûr que ce n'est pas au niveau de la mémoire vidéo que ça sature
    Mon dernier test était de ne plus rien créer ayant un lien avec DirectX. Malheureusement j'étais pressé et j'ai peut-être oublié quelque chose... Je reteste ce soir.

    Pour le déboguage DirectX, aucune erreur.

    Je reteste cette nuit pour voir où sa plante réellement.

  5. #5
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    tu as donc plusieurs fois ce tableau c'est ca qui fait péter la mémoire.
    Faut que tu vide la mémoire allouée par le tableau

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca irait quand même plus vite en utilisant un débogueur, non ?

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Un oubli d'attraper les std::bad_alloc ? Ou de tester la non-nullité du pointeur retourné (en cas de vieux compilo -- étrangement, il y beaucoup de gens qui persistent avec VC6 sur le forum en ce moment.)

    Il se peut aussi que tu aies une erreur, ailleurs, qui corrompe ton contexte d'exécution. Genre une écriture hors-bornes.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Un oubli d'attraper les std::bad_alloc
    La gestion des exceptions fait partie de mes lacunes....

    Il se peut aussi que tu aies une erreur, ailleurs, qui corrompe ton contexte d'exécution
    Bien vu. Le calcul des index dans mes tableaux étaient faux.

    Ca irait quand même plus vite en utilisant un débogueur, non ?
    Oui je pense. Mais j'ai des problemes à faire marcher le debugger sous code::blocks avec Visual Toolkit 2003. Bon promis je m'y mets.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/12/2006, 16h29
  2. [Tableaux] Création dynamique de tableau type array()
    Par Pahcixam dans le forum Langage
    Réponses: 7
    Dernier message: 29/11/2006, 14h34
  3. controle ActiveX pour la Creation d'un tableau
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/08/2006, 08h40
  4. Réponses: 1
    Dernier message: 30/01/2005, 11h00
  5. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02

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