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 :

gestion de la memoire en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut gestion de la memoire en c++
    Tout d'abord bonsoir à tous ceux qui prendront la peine de me lire,

    Je me trouve en face d'un petit problème pour certain, voir une évidence pour d'autre, mais pour moi, il s'agit d'une énorme confusion.

    Je m'explique, je suis actuellement en train d'étudier la gestion de la mémoire, et je dois tester le manque de mémoire et pour cela, je dois écrire un petit programme en utilisant l'opérateur new pour allouer de la mémoire jusqu'à ce qu'il n'y en ait plus de disponible.

    Avant tout, je ne veux aucunement qu'on me fasse le travail, mais qu'on essaye de m'aiguiller dans une marche à suivre et une logique implacable afin que j'arrive à comprendre correctement. Car en fait, il se trouve que je commence à me perdre entre la valeur NULL que retourne new et le gestionnaire d'erreur qui me permet de gérer les exceptions avec try, trow, et catch.

    Si quelqu'un pouvait m'accorder un peu de son temps précieux afin de m'expliquer tout ça et de me donner une direction à suivre, je le remercie sincèrement par avance.

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    En principe l'operator new ne retourne pas NULL mais envoit une exception de type std::bad_alloc.
    Il peut renvoyer NULL dans certains cas, par exemple lorsque le code est compilé avec VC++6. Je crois qu'il est aussi possible de déterminer le comportement de new avec set_new_handler (les gourous devraient en savoir plus).

  3. #3
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonsoir,
    Tout d'abord je te conseillerai de lire ces fac sur les new, et les exeptions:
    http://cpp.developpez.com/faq/cpp/?page=pointeurs
    http://cpp.developpez.com/faq/cpp/?page=exceptions

    Voila, maintenant que tu sais comment ça ce passe en théorie, laisse moi te prévenir que certains compilateurs ne lève pas d'exception lors d'une allocation raté, mais renvoi un pointeur NULL a la place,(Ce comportement peut être modifié par la fonction set_new_handler) donc ne t'étonne pas si ton new n'as pas le comportement attendu.

    [EDIT]
    Bon ok je me suis fait griller...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Merci a camboui et nogane.
    Je m'en vais de suite sur les liens que tu m'as fait passé nogane.
    Par contre camboui, je me suis peut être trop avancé dans mes propos, mais j'avais lu que new retournait NULL tout comme calloc et malloc. Maintenant, il est vrai que se sont des fonctions tandis que new est un opérateur. Est ce pour ça que tu me démontre qu'il y a une différence dans leur retour? (Pour l'un, une valeur et pour l'autre, une exception.)
    Quoi qu'il en soit, je vais lire les faq que nogane m'a noté et je vais voir si je comprends un peu mieux tout ça.
    Et encore un grand Merci, c'est très sympa de m'avoir accordé votre temps.

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    new ne retourne pas une exception... il lance une exception si quelque chose se passe mal, c'est différent d'une valeur de retour.

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bono7 Voir le message
    mais j'avais lu que new retournait NULL tout comme calloc et malloc.
    On s'en fiche un peu ici, mais calloc, malloc et realloc retournent un void*, qui n'est pas forcément NULL.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Il y a une discussion à ce propos dans la seconde partie de ce thread:
    http://www.developpez.net/forums/d64...r/#post3803485
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Merci à vous tous grands et petits gourous.

    Votre aide m'a été très précieuse et les liens indiqués aussi. J'ai pu réalisé mon petit programme et comprendre beaucoup de chose. Je vais donc pouvoir avancer...
    Encore un grand bravo a tous...

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

Discussions similaires

  1. Gestion de la memoire
    Par deeal dans le forum C++/CLI
    Réponses: 8
    Dernier message: 14/11/2006, 14h20
  2. Gestion de la memoire central d'un PC
    Par Bass_Room dans le forum C
    Réponses: 7
    Dernier message: 22/10/2006, 15h02
  3. gestion de la memoire en java
    Par jojob dans le forum Langage
    Réponses: 15
    Dernier message: 16/10/2006, 17h04
  4. Gestion de la mémoire.
    Par nicolas_faf dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 27/03/2006, 16h58
  5. [JVM]Gestion de la mémoire
    Par Crypt dans le forum Général Java
    Réponses: 20
    Dernier message: 31/12/2005, 14h33

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