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 :

utilisation de delete


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par défaut utilisation de delete
    Bonjour

    Je possede une variable static défini ainsi dans le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private:
    	static CMemBuffer* listPreBuffer[3000];
    et initialisé comme ça au début du .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMemBuffer* CMemBuffer::listPreBuffer[3000];
    Dans une de mes méthode, j'ai l'instruction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i = 0; i < MAXBUFFER; i ++)
    	listPreBuffer[i] = new CMemBuffer(1000000);
    Et une fois que que j'ai utilisé ce dont j'avais besoin, je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete [] listPreBuffer;
    Le compilateur me donne l'avertissement C4154 : deletion of an array expression; conversion to pointer supplied
    Si j'exécute malgré tout mon programme, l'espace mémoire n'est pas libéré.

    Pouvez-vous me dire quel est mon problème ?

    Je vous remercie par avance

  2. #2
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Ce ne serait pas plutôt comme ceci?
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i = 0; i < MAXBUFFER; ++i)
    	delete listPreBuffer[i];

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Pourquoi n'utilises-tu pas un vecteur ?

    Là, si ton système arrive à court de mémoire en cours de boucle, il y a des chances que ton exécution n'arrive jamais à ton instruction delete[], et tu auras alors des fuites de mémoire.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par oodini Voir le message
    Pourquoi n'utilises-tu pas un vecteur ?

    Là, si ton système arrive à court de mémoire en cours de boucle, il y a des chances que ton exécution n'arrive jamais à ton instruction delete[], et tu auras alors des fuites de mémoire.
    S'il n'y a plus de mémoire pour l'allocation, c'est plus le système en entier qui risque de planter à la place de l'application.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tout dépend du coût de la construction de l'objet...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    +1 pour l'utilisation de vector.
    Mais bon, ça c'est de manière générale quand on parle de tableau, ici il y a un autre détail que je n'aime pas : tu stockes des pointeurs, donc tu dois forcément parcourir ton vector pour faire des delete dessus. Et ça, comme tout ce qui touche à la destruction des objets, ça devrait être géré par RAII (exception safety powaaa!).

    Les solutions sont multiples:
    - utiliser un vector de shared_ptr
    - utiliser un boost::ptr_vector
    - mettre le vector dans un objet qui va gérer correctement son cycle de vie

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

Discussions similaires

  1. utilisation de delete - Arbre Binaire
    Par azman0101 dans le forum Débuter
    Réponses: 1
    Dernier message: 09/01/2011, 17h02
  2. Risque de l'utilisation de cascade delete
    Par Lucas Panny dans le forum SQL
    Réponses: 13
    Dernier message: 02/10/2008, 15h59
  3. utilisation de delete
    Par patmar83 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/06/2008, 22h29
  4. comment utiliser delete * ?
    Par stphmrt dans le forum DB2
    Réponses: 2
    Dernier message: 02/06/2008, 10h14
  5. Réponses: 14
    Dernier message: 02/10/2007, 12h21

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