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 :

pointeur dans une boucle


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Par défaut pointeur dans une boucle
    Bonjour à tous,

    je trouve un problème de mémoire dans un programme (bad_alloc) à cause d'une petite boucle et un pointeur ! j'ai essayé différentes manières de déclaration de ma variable (pointeur raw, pointeur intelligent et statique) mais toujours avec des soucis

    voici le corps de ma boucle sachant que CText est une classe personnelle

    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
     
    for(int i=1; i<=iterations; i++)
    {
      CText *text = new CText;
      text->LoadFile(i);
     
      // autres opérations
     
      if(text != NULL)
      {
        delete text;
        text = NULL;
      }
     
    }
    J'aimerai résoudre ce problème aussi-tôt, merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CText *text = new CText;
    Pourquoi ne pas faire simplement :Les pointeurs sont nécessaires pour l'héritage. Je ne vois pas leurs utilités ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=1; i<=iterations; i++)
    Serait sans doute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0; i<iterations; i++)
    Un tableau commence généralement à zéro, et sa taille correspond à la dernière case + 1.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Par défaut
    Merci pour votre réponse !

    Une petite précision, la boucle n'est pas un parcours de tableau pour commencer par 0 ! Ce sont des fichiers parcourus de 1 jusqu'à un certain nombre. En effet, j'ai essayé aussi la déclaration statique (comme vous avez mentionné) de ma variable mais le résultat reste le même (atteindre 2 Gb de RAM) bad_alloc!

    Ce que je comprends pas est pourquoi la ressource allouée n'est pas libérée correctement après l'appel de delete ????

    PS: le test est fait sous dev-c++ et visual c++

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par x-programer Voir le message
    (atteindre 2 Gb de RAM)
    Je crois qu'on l'a le problème là.

    Tu essayes de faire quelque chose que ton pc ne peut pas.
    http://www.cplusplus.com/reference/new/bad_alloc/
    Tu peux le tourner dans tous les sens, (smart) pointeur, statique etc.. quand t'as plus de ram, t'as plus de ram.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Par défaut
    Le mieux serait que tu nous montres la classe Ctext... au moins les constructeurs et le destructeur ainsi que les fonctions qu'ils appelent.

    Quelle est la ligne de code qui lance l'exception ?

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 31
    Par défaut
    merci à tous, enfin j'ai résolu le problème le problème était dans une de mes structures de bas niveau (intérieures), j'ai pas défini une fonction release pour elle !

    j'espère que ça aidera quelqu'un d'autre qui utilise les pointeurs (il faut toujours vérifier l'allocation et la libération des ressources)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  2. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  3. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  4. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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