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 :

SIGTRAP IS BACK


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut SIGTRAP IS BACK
    Bonsoir,

    Encore une galère dont je n'arrive pas à me dépatouiller tout seul :S

    Voici la fonction en question

    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
     
    char *get_file_number(char *file_name)
    {
        char *file_number = allocate_1D_char_ptr(5);
        char *str_dup = my_strdup(file_name);
        while( *str_dup != '\0' )
            str_dup++;
     
        int i;
        for ( i=0 ; i<4 ; i++ )
        {
            str_dup--;
            file_number[3-i]=*str_dup;
        }
     
        file_number[4]='\0';
        free(str_dup) ; str_dup = NULL;
        return file_number;
    }
    Je lance un debug : Le programme tourne jusqu'à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Program received signal SIGTRAP, Trace/breakpoint trap.
    In ntdll!TpWaitForAlpcCompletion () (C:\Windows\system32\ntdll.dll)
    #12 0x00401b4f in get_file_number (file_name=0x653980 "00012182.bak") at I:\Copie de file\pattern.c:97
    I:\Copie de file\pattern.c:97:2228:beg:0x401b4f
    At I:\Copie de file\pattern.c:97
    Voici le contenu des "watches" :



    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Vu les manipulations que tu fais sur ton pointeur str_dup, lors du free(), il ne pointe plus sur l'adresse allouée retournée par la fonction strdup(), d'où je pense l'erreur que tu obtiens.
    De plus n'effectuant aucune modification sur str_dup, pourquoi ne pas travailler directement sur file_name ?

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Ben en fait c'est là que je ne suis pas sur.
    Je fais bouger ce sur quoi pointe str_dup.
    Si je le faisais directement sur file_name, celui ci ne pointerait plus sur le même chose nan ?
    Je me doutais bien que c'était un truck comme ça mais merci de confirmer que c'est bien parce que j'essaye un free sur un variable qui ne pointe plus sur l'@ du premier block mémoire d'allocation. (str_dup est bien modifié donc ?).
    Comment je fais alors pour libérer proprement str_dup ?
    Cependant, pourquoi cela marche pour une centaine de fichiers avant de planter ?

    Cordialement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si je le faisais directement sur file_name, celui ci ne pointerait plus sur le même chose nan ?
    Bien sûr que si. file_name est un copie du pointeur que tu rentres. Et tant que tu ne modifies pas le contenu de l'adresse qu'il pointe (ce qui n'est pas le cas ici, tu ne fais que le parcourir), il n'y a aucune raison de le recopier inutilement, et de s'embêter avec un malloc/free supplémentaire.

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Ah oui, c'est vrai, chaque paramètre de la fonction est dupliqué sur le tas c'est bien ça ?
    Ca fait longtemps que j'ai pas codé, j'oublie vite =)
    Merci pour le rafraichissement.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    A chaque fois que tu tu appelles une fonction, tu va empiler sur la pile (et non le tas) un emplacement pour la valeur de retour, l'adresse de retour (= là où tu étais lorsque tu as appelé la fonction) et ensuite tous les paramètres passés à ta fonction.

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

Discussions similaires

  1. CullFace (Front / Back Face)
    Par Finch dans le forum OpenGL
    Réponses: 5
    Dernier message: 27/04/2005, 15h16
  2. Back Office
    Par Ric500 dans le forum Access
    Réponses: 12
    Dernier message: 02/12/2004, 15h25
  3. Script pour back up database
    Par jeff37 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2004, 15h57
  4. [Debutant]Back up et restore
    Par christophebmx dans le forum Administration
    Réponses: 2
    Dernier message: 22/05/2004, 15h53

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