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

Bibliothèque standard C Discussion :

stack smashing detected et sscanf


Sujet :

Bibliothèque standard C

  1. #21
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Pfiouu ca sens la grosse galère...

    Pour les buffers de lecture, oui ce sont juste des valeurs de test, et je m'assure simplement que la taiulle du buffer de lecture est plus grande que celle des trois champs additionnés... Les tailles précises viendront quand mon code marchera

  2. #22
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans ton fichier, les champs sont séparés par un seul blanc? Il n'y a pas de caractères blancs ou autres après le dernier champ?
    Regarde le contenu et la taille de la chaîne dans buf.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #23
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Séparés par un seul blanc oui. Ce que je ne comprends pas c'est pourquoi ma structure s'affiche correctement juste avant l'apparition de l'erreur...

  4. #24
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Citation Envoyé par vinzzzz Voir le message
    Séparés par un seul blanc oui. Ce que je ne comprends pas c'est pourquoi ma structure s'affiche correctement juste avant l'apparition de l'erreur...
    Encore une fois, cela ne prouve pas que tu n'as pas écrasé une valeur en dehors de ton buffer

  5. #25
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Le contenu de la chaine buf corresponds bien a chaques lignes.
    De même si j'affiche tous les buffers au fur et a mesure j'obtient bien le contenu de mon fichier.

  6. #26
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Encore une fois, cela ne prouve pas que tu n'as pas écrasé une valeur en dehors de ton buffer
    Oui. Pourquoi le programme ne s'arrete t-il pas au moment même ou il y a dépassement? (pour parfaire mes connaissances )

  7. #27
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    simplement parce que la valeur écrasée n'est pas référencée (utiisée) à ce moment-là..

    Et qu'au moment où tu en as besoin, crac !!!!

    Dans t mémoire, vraisemblablement tu écrases quelque chose quelque part (suivant les allocs, reallocs, etc..).. Ca peut être un pointeur, le début d'un morceau de code, le milieu, un élément d'une liste, une partie d'un double, n'importe quoi...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #28
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Oui ca semble logique en effet

  9. #29
    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 vinzzzz Voir le message
    Hello,

    J'ai cette superbe erreur qui apparait lors de l'execution de mon programme. Voici le bout de code a prioris concerné (réduit au minimum vital):
    <...>
    Voila si quelqu'un a une idée...
    Donne un exemple de fichiers de données à traiter.

    J'en suis là :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define my_realloc(a, b) realloc(a, b)
    #define my_malloc(a) malloc(a)
     
    typedef struct s_params
    {
       char **fapo, **fcomplex, **fligan;
       int nfiles;
       float ashape_min_size, ashape_max_size;
    }
    s_params;
     
    int add_prot (char *apo, char *complex, char *ligan, s_params * par)
    {
       FILE *f = fopen (apo, "r");
       int nm1;
       if (f != NULL)
       {
          fclose (f);
          f = fopen (complex, "r");
          if (f)
          {
             nm1 = par->nfiles;
             par->nfiles += 1;
             par->fapo =my_realloc (par->fapo, (par->nfiles) * sizeof (char *));
             par->fligan =my_realloc (par->fligan,
                                      (par->nfiles) * sizeof (char *));
             par->fcomplex =my_realloc (par->fcomplex,
                                      (par->nfiles) * sizeof (char *));
     
             par->fapo[nm1] = my_malloc ((strlen (apo) + 1) * sizeof (char));
             par->fcomplex[nm1] =
                my_malloc ((strlen (complex) + 1) * sizeof (char));
             par->fligan[nm1] = my_malloc ((strlen (ligan) + 1) * sizeof (char));
     
             strcpy (par->fapo[nm1], apo);
             strcpy (par->fcomplex[nm1], complex);
             strcpy (par->fligan[nm1], ligan);
     
             fclose (f);
          }
          else
             return 0;
       }
       else
          return 0;
     
       return 1;
    }
     
    int add_list_data (char const *str_list_file, s_params * par)
    {
       FILE *f;
       int n, nread = 0, status;
     
       char buf[150], apobuf[10], ligbuf[50], complexbuf[50];
     
       f = fopen (str_list_file, "r");
       if (f)
       {
          while (fgets (buf, 150, f))
          {
             n = par->nfiles;
             status = sscanf (buf, "%s %s %s", apobuf, complexbuf, ligbuf);
     
             if (status == 3)
             {
                nread += add_prot (apobuf, complexbuf, ligbuf, par);
             }
          }
       }
     
       // FLAG
       return (nread);
    }
     
    int main (void)
    {
     
       char str_list_file[128] = "ABCD";
     
       s_params par = { 0 };
     
       int err = add_list_data (str_list_file, &par);
       printf ("err = %d\n", err);
       return EXIT_SUCCESS;
    }
    Pas de Wi-Fi à la maison : CPL

  10. #30
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Je test avec le fichier suivant:
    2onjapo.pdb 2onjco.pdb CFM
    1btaapo.pdb 1btaco.pdb HEA
    2fejapo.pdb 2fejco.pdb CLP
    1pnmapo.pdb 1pnmco.pdb FES
    Je viens de lancer le prog sous linux fedora (je suis habituellement sous ubuntu) et non aucun problème... Y'a quelque chose que je comprends vraiment pas dans cette histoire.

    Merci en tout cas a tous pour votre aide... Y'a des fois quand ca veux pas

  11. #31
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Ca ne veux pas dire que ça ne se reproduira pas dans 3heures...c'est un comportement indéfini.

  12. #32
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Bon, j'ai identifié le problème je crois................. En augmantant la taille des buffers ca fonctionne.

    En fait J'ai inversé les tailles allouées a deux buffers: apo et ligan... En gros j'utilise apo pour lire les premières colonnes, ce qui en théorie (au niveau des noms) est ce que je comptait faire, sauf que je lui ai alloué 10 caractères (ce que j'aurai du faire pour ligan qui lui en contiens 50 au lieu de 10) au lieu de 50. Et dans mon exemple, la première colonne contiennent 11 caractères... Je pense que c'est ca car ca ne plante plus là....

    3 pages pour une idiotie pareille. Vraiment, vraiment désolé d'avoir pris de votre temps a tous...

  13. #33
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Or je ne comprends pas pourquoi: tous mes buffers sont largements assez grands pour contenir mes diverses lectures

  14. #34
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Ouii.......... Vraiment désolé

    J'aurai du poster le jeu de test dés le départ je pense que vous auriez tout de suite vu... C'est en le postant sur la page précédente que jme suis posé la question (un peu tard a mon gout...)

  15. #35
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    en effet je pense que tu aurais pu au moins tester d'augmenter la taille des buffer à 1000 dès le début

    sinon si tu veux avancer un peu dans le débuggage et comprendre pourquoi telle erreur arrive à tel moment fais un peu d'assembleur

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. stack smashing detected?
    Par sayanmehdi dans le forum C
    Réponses: 1
    Dernier message: 15/06/2010, 14h09
  2. stack smashing detected lors d'une lecture de fichier
    Par Dave62 dans le forum Débuter
    Réponses: 5
    Dernier message: 06/11/2009, 13h50
  3. Probléme * stack smashing detected *
    Par Mat262 dans le forum Débuter
    Réponses: 13
    Dernier message: 23/12/2008, 21h34
  4. Problème de "stack smashing detected"
    Par Mr Light dans le forum C++
    Réponses: 9
    Dernier message: 29/02/2008, 09h09
  5. "stack smashing detected" encore...
    Par incal dans le forum Débuter
    Réponses: 11
    Dernier message: 01/10/2007, 17h53

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