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

  1. #1
    Membre régulier
    Inscrit en
    novembre 2013
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : novembre 2013
    Messages : 215
    Points : 105
    Points
    105
    Par défaut Message d'erreur en Debug mais pas en Release
    Hello

    Je dois reprendre un programme d'un client en C.
    Ayant une expérience très moyenne en C, je fait un appel a l'aide pour un Problème qui n'apparait que en mode Debug.

    Le programme marche quand je build mais pas j'exécute en Debug , En release ca marche


    Message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    API_Utils.c lin63,col5 thread id 3120
    Dereference of pointer to freed memory

    Voici le bout de code

    Déclaration des Variable et appel de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Declaration de ma variable 
        unsigned int       vl_uMask[0]={0};  
     
     Appel de la fonction ci dessus
     
    Util_GetMaskFromSig (vl_uMask);
    Fonction
    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
    int Util_GetMaskFromSig (unsigned int *mask){
     
        unsigned int mask1,mask2,mask3,mask4,mask5,mask6;
        unsigned int vl_mask = 0;
     
        sscanf(vg_szDeviceHSDIORadiatedSup,    "%i",&mask1);
        sscanf(vg_szDeviceHSDIOModulation,     "%i",&mask2);
        sscanf(vg_szDeviceHSDIOPhaseModulation,"%i",&mask3);
        sscanf(vg_szDeviceHSDIOMskControl,     "%i",&mask4);
        sscanf(vg_szDeviceHSDIOTestSup,        "%i",&mask5);
        sscanf(vg_szDeviceHSDIOTest,           "%i",&mask6);
     
     
     
        vl_mask=pow(2,mask1)+pow(2,mask2)+pow(2,mask3)+pow(2,mask4)+pow(2,mask5)+pow(2,mask6);       
     
        *mask=vl_mask;   <===== ERREUR ICI
     
    return 0;
    }
    Merci de votre aide

  2. #2
    Membre régulier
    Inscrit en
    novembre 2013
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : novembre 2013
    Messages : 215
    Points : 105
    Points
    105
    Par défaut
    Bon solution trouvé entre temps

    La variable suivante
    unsigned int vl_uMask[0]={0};

    il faut enlever le {0}

    voila

    Bonne journée

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    juillet 2020
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : juillet 2020
    Messages : 65
    Points : 180
    Points
    180
    Par défaut
    Hello,
    définir un tableau de taille nulle c'est jamais bon →
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int       vl_uMask[0]={0};
    Vu le code, un simple unsigned int suffirait, ou alors un tableau de taille 1 (mais c'est moyen propre).

    edit: ta solution n'est pas bonne, enfin àmha. Si tu passe un profiler sur ton code il va s'afforler.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 185
    Points : 40 727
    Points
    40 727
    Par défaut
    De plus, ton calcul de vl_mask n'est pas très robuste: Si jamais deux masques fournis ont la même valeur, tu vas avoir des résultats inattendus. Tu devrais, selon si tu es cansé accepter ce cas ou non, remplacer les + par des |, ou faire des contrôles plus complexe pour afficher un message d'erreur et refuser l'entrée.
    (Au passage, vu que tu bosses avec des entiers, 1<<x remplacerait avantageusement pow(2, x) ici)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 810
    Points : 24 174
    Points
    24 174
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par gyver76370 Voir le message
    Bon solution trouvé entre temps

    La variable suivante
    unsigned int vl_uMask[0]={0};

    il faut enlever le {0}
    Un réflexe à avoir: si enlever une instruction licite règle un souci, c'est que
    1. en réalité le souci n'est pas réglé (il semble juste réglé)
    2. le souci est bien plus profond que ce qu'il parait car il est très probablement un comportement indéterminé (en fait non, c'est réellement un comportement indéterminé)

    Mettre ={0} pour initialiser un tableau est parfaitement autorisé. Si le mettre fait crasher ton truc et l'enlever ne crashe plus, c'est que tu es tombé direct dans le cas ci-dessus.

    Citation Envoyé par gyver76370 Voir le message
    voila
    Tu l'as dit.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/11/2012, 13h04
  2. programme fonctionne en debug mais pas en release ?
    Par membreComplexe12 dans le forum C++
    Réponses: 20
    Dernier message: 16/05/2012, 12h52
  3. Réponses: 6
    Dernier message: 14/06/2011, 19h39
  4. Fonctionne en Debug mais pas en Release
    Par Baud10 dans le forum MFC
    Réponses: 23
    Dernier message: 04/02/2008, 16h17
  5. regsvr32 failed en debug mais pas en release
    Par afan dans le forum DirectX
    Réponses: 1
    Dernier message: 09/06/2004, 11h32

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