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

Windows Discussion :

Problèmes gestion mémoire?


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problèmes gestion mémoire?
    voila je viens vers vous car je me retrouve confronter à un problème surement du à une mauvaise gestion mémoire mais je ne vois pas ou pourrais se situer le pb. je vous passe le source des 2 fonctions qui me posent pb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    /******************************************************************************/
    /* Fonction de log générale                                                   */
    /******************************************************************************/
    void log(BOOL TimeStamp, char *op, ...) {
      va_list args;
      char *arg = op;
      int i;
      char *line = NULL;
      int n = 0;
      char lname[50];
      time_t t = time(NULL);
      struct tm *h = localtime(&t);
      FILE *lfile;
      va_start(args, op);
      while (arg) {
        i = strlen(arg);
        line = (char*) realloc(line, n + i);
        memcpy(line + n, arg, i);
        n += i;
        arg = (char*) va_arg(args, char*);
      };
      va_end(args);
      line = (char*) realloc(line, n + 1);
      line[n] = '\0';
      sprintf(lname, "%s%02d-%02d-%04d.log\0", LOG_PATH, h->tm_mday, h->tm_mon + 1, h->tm_year + 1900);
      lfile = fopen(lname, "at+");
      if (TimeStamp) {
        fprintf(lfile, "%02d:%02d:%02d - %s\n", h->tm_hour, h->tm_min, h->tm_sec, line);
      }else{
        fprintf(lfile, "%s\n", line);
      }
      fclose(lfile);
      free(line);
      free(arg);
    };
    
    /******************************************************************************/
    /* Fonction de log de débugage                                                */
    /******************************************************************************/
    void debug_log(BOOL TimeStamp, char *op, ...) {
      va_list args;
      char *arg = op;
      int i;
      char *line = NULL;
      int n = 0;
      char lname[50];
      time_t t = time(NULL);
      struct tm *h = localtime(&t);
      FILE *lfile;
      va_start(args, op);
      while (arg) {
        i = strlen(arg);
        line = (char*) realloc(line, n + i);
        memcpy(line + n, arg, i);
        n += i;
        arg = (char*) va_arg(args, char*);
      };
      va_end(args);
      line = (char*) realloc(line, n + 1);
      line[n] = '\0'; 
      sprintf(lname, "%s%02d-%02d-%04d.log\0", DEBUG_PATH, h->tm_mday, h->tm_mon + 1, h->tm_year + 1900);
      lfile = fopen(lname, "at+");
      if (TimeStamp) {
        fprintf(lfile, "%02d:%02d:%02d - %s\n", h->tm_hour, h->tm_min, h->tm_sec, line);
      }else{
        fprintf(lfile, "%s\n", line);
      }
      fclose(lfile);
      free(line);
      free(arg);
    };
    pour information complémentaire ces fonctions fonctionnent bien en l'état mais au bout d'un nombre X d'appel le programme principal se coupe tout seul (segfault) si quelqu'un à une idée d'ou viens le pb, je suis preneur

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    line = (char*) realloc(line, n + i);
    memcpy(line + n, arg, i);
    Citation Envoyé par jehro37
    pour information complémentaire ces fonctions fonctionnent bien en l'état mais au bout d'un nombre X d'appel le programme principal se coupe tout seul (segfault) si quelqu'un à une idée d'ou viens le pb, je suis preneur
    Je dirais que tu devrais impérativement tester le retour de realloc() afin d'être sur que l'espace mémoire supplémentaire alloué a réussi avant d'y copier des nouvelles données.

Discussions similaires

  1. Problème ntdll, Gestion mémoire..
    Par krapo13 dans le forum C++
    Réponses: 37
    Dernier message: 31/05/2011, 17h59
  2. [C# 2.0] Problème gestion mémoire
    Par Stéphane-M dans le forum Windows Forms
    Réponses: 13
    Dernier message: 21/09/2006, 14h36
  3. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  4. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06
  5. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34

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