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 :

MALLOC - glibc detected


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut MALLOC - glibc detected
    Hello !

    Donc voila je viens poster suite a un petit probleme ! Je rencontre un *** glibc detected *** mais je ne comprends strictement pas pourquoi

    En fait void create_wordtab(t_file *f); va me creer et remplir un tableau de pointeur sur char. La largeur doit etre de la valeur f->width_lines et la heuteur f->nb_lines. Cette fonction plante au moment du
    f->tab = malloc(sizeof(*(f->tab)) * (f->nb_lines + 1)); et renvoie *** glibc detected *** ./xxx: malloc: top chunk is corrupt: 0x09d45020 ***

    Donc si qqn pouvait me dire d'ou cela venait, je l'en remercie !
    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
    typedef struct          s_quares
    {
      int                   coor_x;
      int                   coor_y;
      int                   size;
      struct s_quares       *next;
    }                       t_squares;
     
    typedef struct          s_file
    {
      int                   fd;
      int                   nb_lines;
      int                   width_lines;
      int                   buffer_width;
      int                   buffer_position;
      char                  buffer[BUFFER_SIZE];
      char                  **tab;
      t_squares             *begin;
    }
     
    void            create_wordtab(t_file *f)
    {
      int           x;
      int           y;
     
      x = 0;
      y = 0;
      f->tab = malloc(sizeof(*(f->tab)) * (f->nb_lines + 1)); /* ERROR ! */
      if (f->tab == NULL)
        {
          my_putstr(MALLOC_ERROR);
          exit(EXIT_FAILURE);
        }
      f->tab[f->nb_lines] = NULL;
      /* ... */
    }
     
    void            init_wordtab(t_file *f, char *path)
    {
      f->fd = open(path, O_RDONLY);
      if (f->fd <= 0)
        {
          my_putstr(OPEN_ERROR);
          exit(EXIT_FAILURE);
        }
      create_wordtab(f);
      close(f->fd);
      print_wordtab(f->tab);
    }
    void            do_prog(char *path)
    {
      t_file        *f;
     
      f = init_f();
      if (f == NULL)
        {
          my_putstr(MALLOC_ERROR);
          DEBUG_INFO;
          exit(EXIT_FAILURE);
        }
      get_dimensions(f, path);
      init_wordtab(f, path);
    }

  2. #2
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Bonsoir,

    Pourrais tu completer les définitions des variables telles que t_file...

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    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
    typedef struct          s_quares
    {
      int                   coor_x;
      int                   coor_y;
      int                   size;
      struct s_quares       *next;
    }                       t_squares;
    
    typedef struct          s_file
    {
      int                   fd;
      int                   nb_lines;
      int                   width_lines;
      int                   buffer_width;
      int                   buffer_position;
      char                  buffer[BUFFER_SIZE];
      char                  **tab;
      t_squares             *begin;
    }
    
    void            create_wordtab(t_file *f)
    {
      int           x;
      int           y;
    
      x = 0;
      y = 0;
      f->tab = malloc(sizeof(f->tab) * (f->nb_lines + 1)); /* ERROR ! */
      if (f->tab == NULL)
        {
          my_putstr(MALLOC_ERROR);
          exit(EXIT_FAILURE);
        }
      f->tab[f->nb_lines] = NULL;
      /* ... */
    }
    
    void            init_wordtab(t_file *f, char *path)
    {
      f->fd = open(path, O_RDONLY);
      if (f->fd <= 0)
        {
          my_putstr(OPEN_ERROR);
          exit(EXIT_FAILURE);
        }
      create_wordtab(f);
      close(f->fd);
      print_wordtab(f->tab);
    }
    void            do_prog(char *path)
    {
      t_file        *f;
    
      f = init_f();
      if (f == NULL)
        {
          my_putstr(MALLOC_ERROR);
          DEBUG_INFO;
          exit(EXIT_FAILURE);
        }
      get_dimensions(f, path);
      init_wordtab(f, path);
    }
    Il faut que tu fasses :

    pour avoir la taille d'un pointeur de char.

  4. #4
    screetch
    Invité(e)
    Par défaut
    cette erreur provient souvent d'un ecrasement mémoire qui c'est produit avant l'allocation, pas lors de l'allocation elle-même.
    A priori je dirais que l'erreur pourrait etre dans get_dimensions? ou quelque part avant en tous cas.
    (et c'est bien sizeof(*(f->tab)), ou comme ecrit plus souvent, sizeof(f->tab[0]), la taille du premier élément multiplié par le nombre d'éléments)

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    Re,

    desole pour l'attente! En fait j'ai eu a recommencer moin programme depuis 0 du coup j'pensais plus a l'erreur et j'l'ai resolu il y a peu (pour comprendre le comment du pourquoi)

    L'erreur venais tout simplement du fait qu'au moment d'allouer la memoire a mon t_file je m'y etait pris comme un manchot !

    J'avait faot un sizeof() de f au lieu d'un *f !

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

Discussions similaires

  1. erreur glibc detected double free or corruption.
    Par Screwt-K dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2007, 16h46
  2. glibc detected.. realloc pbm
    Par djynwk dans le forum C
    Réponses: 3
    Dernier message: 28/04/2007, 19h13
  3. * glibc detected * free(): invalid pointer
    Par ViRouF dans le forum C
    Réponses: 4
    Dernier message: 28/03/2007, 17h10
  4. [Debutant]*** glibc detected *** free()
    Par Treuze dans le forum Débuter
    Réponses: 3
    Dernier message: 17/03/2006, 15h34
  5. Réponses: 5
    Dernier message: 04/11/2005, 18h59

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