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 :

liberation de memoire necessaire ?


Sujet :

C

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut liberation de memoire necessaire ?
    Bonjour,

    Quand on utilise le code suivant (de la FAQ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       time_t timestamp;
       struct tm *t;
     
       /* Lecture de la date et de l'heure */
       timestamp = time (NULL);
       t = gmtime(&timestamp);
    la structure que l'on obtient avec gmtime, doit on la liberer ?

    si j'utilise plusieurs fois d'affiler la derniere ligne du code, ne risque on pas d'allouer de la memoire sans jamais la liberer, donc de finir par la saturer ?

    si oui, comment la liberer ?

    merci

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Salut,

    This structure is statically allocated and shared by gmtime, localtime and ctime functions. Each time one of these functions is called the content of the structure is overwritten.
    Ce qui veut dire que le contenu est à chaque fois écrasé, et donc il n'y a pas de consommation de mémoire supplémentaire, j'imagine qu'une structure est allouée par thread.

    Trouvé sur http://www.cplusplus.com/ref/ctime/gmtime.html

    A+

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    De la page man de la fonction (c'est à ce genre de chose que sert les pages man...)

    http://man.developpez.com/man3/gmtime.3.php

    la fonction gmtime() convertit la date timep en une représentation struct tm exprimée en Temps Universel. Elle peut renvoyer NULL quand l'année ne tient pas dans un entier. La valeur renvoyée pointe vers une structure allouée statiquement qui peut être écrasée par une invocation ultérieure d'une fonction de date ou d'heure. La fonction réentrante gmtime_r() effectue le même travail mais stocke le résultat dans une structure fournie par l'appelant.
    Donc la réponse est non il ne faut pas libérer la mémoire...

    Jc

    [EDIT] Battu mais de pas grand chose [/EDIT]

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Pour une fois que je suis plus rapide qu'un redacteur/moderateur, je suis tout fièr

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    lol, merci les gars

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par firejocker
    Bonjour,

    Quand on utilise le code suivant (de la FAQ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       time_t timestamp;
       struct tm *t;
     
       /* Lecture de la date et de l'heure */
       timestamp = time (NULL);
       t = gmtime(&timestamp);
    la structure que l'on obtient avec gmtime, doit on la liberer ?


    M'enfin, je n'arrive pas à comprendre qu'on puisse poser sans honte ce genre de question débile. Tu travailles sans doc ? Au hasard ? Tant que ça compile, c'est ok, c'est ça ?

    M'enfin avant d'utiliser une fonction, même si tu crois la connaître, il faut lire la doc, c'est le minimum, non ? Tu crois qu'on va les trouver où les réponses ? Dans nos cerveaux embrumés, gruyérisés par Alzheimer ? Ben non, on va lire la doc. Trop peur de dire une connerie !

    Et ça, tu ne peux pas le faire ? C'est l'assistanat permanent ? Allo Maman bôbô, dès qu'on a un pet de travers ? Il faut apprendre à se prendre en main un peu. Et comme disait un contributeur sur un forum C international :

    "Ask smart questions"

    Réponse ici :

    http://man.developpez.com/

    A BOOKMARQUER

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Ce qui veut dire que le contenu est à chaque fois écrasé, et donc il n'y a pas de consommation de mémoire supplémentaire, j'imagine qu'une structure est allouée par thread.
    Non. Par processus... C'est ça le gag...

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Donc comment tu fais pour en avoir un par thread ? Tu sauvegardes toi même le contenu à chaque fois ?

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    @Emmanuel Delahaye

    Désolé, c'est juste que je n'avais aucune idée de ou trouver cette reponse,

    j'ai cherché sans succés sur google (jte l'accorde, j'ai pas cherché 2h durant faute de temps), et puis je ne connaissais pas cette url (man..)

    je ne cherchais pas l'assistanat comme tu le dit, juste l'aide que je n'ai pas, je travaille sans ide et sans doc sur un compilateur en ligne de toshiba, cc900 et sous windows, je n'ai donc malheureusement pas le man de linux pour m'aider, ce n'est donc pas par flemmardise que j'ai posté.

    Je te signale tout le monde cherche en general dans la doc pour repondre, donc, si c'est pour incendier ce qui demandent le moindre truc, c'est pas la peine de trainer sur les forums.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Donc comment tu fais pour en avoir un par thread ? Tu sauvegardes toi même le contenu à chaque fois ?
    Marche pas en préemptif. C'est pour ça que c'est une fonction n'est pas thread-safe comme indiqué dans toute doc sérieuse.

    C'est une des raisons du combat permanent contre les globales au profit des contextes. Les bibliothèques n'ont pas, sauf cas exceptionnels correctement justifiés, à gérer de mémoire interne. Interdit.

    Par exemple POSIX définit un strtok_r() pour remplacer strtok() qui n'est pas thread-safe.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par firejocker
    @Emmanuel Delahaye

    Désolé, c'est juste que je n'avais aucune idée de ou trouver cette reponse,

    j'ai cherché sans succés sur google
    Faut arréter de se moquer du monde.

    google gmtime

    4ème réponse (1ère en français) :

    http://dpobel.free.fr/man/html/affic...49/man/gmtime/

    En pour y arriver directement :

    google : man 3 gmtime

    Voilà. Maintenant, tu sais.

  12. #12
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Merci pour l'info Emmanuel Delahaye

    firejocker : je pense qu'Emmanuel estime ( à juste titre je pense ) que si tu utilises cette fonction c'est que tu en as consulté la doc, et vu que la réponse à ta question y figure, tu as dû la regarder très vite !

    Mais c'est normal parfois, manque de temps on passe à coté des choses qui sont écrites noir sur blanc, perso je ne t'en veux pas de poster une question comme ça, on a tous un jour ou l'autre été perdu malgré que la réponse était sous nos yeux évidente !

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par KiLVaiDeN
    firejocker : je pense qu'Emmanuel estime ( à juste titre je pense ) que si tu utilises cette fonction c'est que tu en as consulté la doc, et vu que la réponse à ta question y figure, tu as dû la regarder très vite !
    C'est ça ou la flemme de chercher, tout simplement. Les deux cas méritent le bâton.

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    @KiLVaiDeN : Ouep, j'ai du la rater. merci encore.

    @Emmanuel Delahaye : Tres bien, jm'incline.

  15. #15
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    je vous propose de trinquer et de sourire aux erreurs que nous avons tous commis un jour ! A+ bonne journée

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

Discussions similaires

  1. liberation de memoire : override de dispose necessaire ?
    Par zax-tfh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 13h26
  2. Liberer la memoire
    Par Renardo dans le forum Access
    Réponses: 13
    Dernier message: 15/05/2006, 11h33
  3. Liberation de memoire
    Par dede92 dans le forum C
    Réponses: 17
    Dernier message: 18/03/2006, 21h31
  4. liberer la memoire
    Par jopab04 dans le forum Langage
    Réponses: 14
    Dernier message: 11/02/2006, 15h56
  5. liberation de memoire d une fenetre modale
    Par ienien dans le forum MFC
    Réponses: 6
    Dernier message: 04/01/2006, 13h53

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