Partage
  • Partager sur Facebook
  • Partager sur Twitter

Désallocation de la mémoire

Sujet résolu
    11 octobre 2007 à 19:36:16

    Bonjour.

    Lorsqu'on alloue de la mémoire simplement en fesant int Variable; on demande à l'os une place dans la mémoire vive.
    Ma question c'est: Sans allouer de la mémoire grâce à new, comment fait-on pour désallouer de la mémoire.

    1. int Variable = 0;
    2. //Code pour dire à l'OS que je libère cette mémoire


    Et même question pour l'objet string. Je crois que ce n'est pas possible d'appeller le destructeur de cette classe pour déshallouer la mémoire qu'elle utilise.


    Cordialement, fred.
    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2007 à 19:41:23

      Bon alors je suis pas un pro du langage mais je dirais que la variable est détruite a la fin de la fonction (si c'est une variable locale) si elle est globale ba a la fin du programme.
      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2007 à 19:44:42

        Oui, c'est correcte.
        Mais si je veux la supprimer au millieu d'une fonction?
        • Partager sur Facebook
        • Partager sur Twitter
          11 octobre 2007 à 19:48:38

          hum je dirais que le seule moyen c'est l'allocation dynamique mais si c'est possible je suis très interresé :)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            11 octobre 2007 à 19:50:09

            2 solutions:
            1) new/delete !!
            2)Tu la place dans un bloc artificiel du genre :
            1. int foo()
            2. {
            3. {//début faux bloc
            4. }//fin faux bloc
            5. }


            Edit :griled
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 octobre 2007 à 19:52:57

              Bah, si tu veux faire cela par un appel à une fonction ou un opérateur, ce n'est pas possible (du moins pas à ma connaissance o_O ).
              Par contre, il existe d'autres moyens, certes avec pas mal de contraintes : ta variable est détruite à la fin du bloc dans lequel elle a été créée, donc par exemple si tu fais :

              1. {
              2. int t = 3;
              3. std::cout << t << std::endl;
              4. }
              5. /* Ta variable est détruite */


              Mais bon, ça détruit toutes les autres variables également créées dans ce bloc. Le mieux, si tu veux pouvoir détruire ta variable à tout moment, est de passer par l'allocation dynamique ;) .

              EDIT: arf, on dirait que l'anti-grill n'a pas marché sur le coup :-° .
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                11 octobre 2007 à 19:59:47

                tu créé un nouvelle variable, ou alors tu met la tienne a zéro!
                pourquoi se compliquer la vie?

                et sinon, un peu d'alloc manuelle, ça fait pas de mal!

                bien que int *pointeur = new int(5); c'est un peu débille...
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  11 octobre 2007 à 20:05:53

                  Citation : Geoffroy

                  tu créé un nouvelle variable, ou alors tu met la tienne a zéro!
                  pourquoi se compliquer la vie?

                  et sinon, un peu d'alloc manuelle, ça fait pas de mal!

                  bien que int *pointeur = new int(5); c'est un peu débile...


                  A mon avis il a simplifié la donnée. C'est surement pas pour un simple int qu'il demandait ça, mais pour qqch de plus important. Me trompe-je?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 octobre 2007 à 20:42:04

                    Non, tu te trompes pas.

                    Mais Geoffroy, si tu mets la valeur de la variable à 0, la variable n'est pas désallouée à l'OS.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      11 octobre 2007 à 20:51:14

                      oui, mais pourquoi a tu besoin de désallouer la variable?

                      a part pour le nom, je ne voit pas vraiment, car dans tous les autres cas, c'est mois compliqué de faire une autre variable!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 octobre 2007 à 21:06:20

                        J'ai une sorte de fonction "tampon". Elle charge en mémoire vive des nombres qu'elle trouve dans un fichier(disque dur). (C'est un très grand fichier).
                        Une fois la tâche finie, toute cette mémoire vive chargée, j'en ai plus besoin.

                        Si la fonction s'arrêtait là, ca irait, car la mémoire est désallouée à la fin de la fonction.
                        Mais ma fonction doit ensuite encore charger beaucoup de fichier tout aussi lourd.
                        Alors là, il risque de manquer de mémoire vive.

                        C'est pour cela que je dois veiller à désallouer moi-même la mémoire vive. (Je ne pas réutilliser les anciennes variables car les types de variables sont succeptibles de changer)

                        ++
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Désallocation de la mémoire

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown