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