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++

  1. #1
    Membre à l'essai
    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
    Points : 13
    Points
    13
    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 éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    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 averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    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 à l'essai
    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
    Points : 13
    Points
    13
    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 chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    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.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    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.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    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 à l'essai
    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
    Points : 13
    Points
    13
    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...

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il y a un autre problème. Sur certains systèmes, tant que tu n'as pas touché à la mémoire, tu pourras en récupérer plus que de mémoire à laquelle tu as le droit de toucher. Ca dépend des OS et de leur configuration.

+ 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