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 :

Mon code marche en mode debugging, mais pas en exécution !


Sujet :

C

  1. #21
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Même si j'avance mon nouveau projet en parallèle, je reste coincé quant à celui-ci : personne ne peut m'aider, svp ?

  2. #22
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'autre part, à ce sujet, j'avais déjà signalé, mais je me demande bien pourquoi on met

    et non pas

    ce qui fait quand même économiser 3 octets par valeur.... (en moyenne )

  3. #23
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kidpaddle2
    Très intéressante la comparaison avec le principe d'incertitude... par ailleurs, d'après ce que je vois, le mode debugger allouerait plus de mémoire qu'il n'en est nécessaire (je suis sous Code::Blocks) ?
    je dirais même plus : systématiquement l'usage d'un debugger ou d'un outil incluant un debugger modifie le comportement vis-à-vis de la mémoire... car en général il "surveille" grâce à ses propres mallocs/frees, et est lui-même en général chargé ce qui modifie signaficativement les segments utilisés...


    Et enfin c'est un comportement symptomatique bien connu d'un problème de fuite de mémoire..

  4. #24
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et en passant rapidement sur le code original, je m'aperçois que :

    • Pas de test si les allocations/réallocations se sont correctement effectuées.
    • Donc des copies et des frees potentiellement erronés
    • Une erreur de longueur d'allocation (débordement) :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
          This->list[This->count-1] = malloc( (strlen(path)+1) * sizeof (char));


    En passant en 3 minutes...

  5. #25
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par souviron34
    ce qui fait quand même économiser 3 octets par valeur...
    ...mais peut augmenter la taille du code (et le temps d'execution) s'il y a beaucoup de conversion a faire vers int. Si on est limite en memoire, char est bon choix. Sinon, il y a peu de raisons de ne pas utiliser int.

  6. #26
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par DaZumba
    ...mais peut augmenter la taille du code (et le temps d'execution) s'il y a beaucoup de conversion a faire vers int.
    bah à ce compte-là pourquoi utiliser un booléen ??

    c'est bien 0 ou 1, si mes souvenirs sont bons

    Donc pourquoi stocker dans une variable qui peut aller jusqu'à INT_MAX ??

    256 valeurs c'est déjà largement suffisant pour en représenter 2....

    Et si il y a beaucoup de conversion vers int c'est qu'on a mal choisi sa variable....

  7. #27
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Je rappelle que les paramètres de fonction sont facilement promus en Int, et que les procs les plus rapides ne savent pas faire des opérations (même des comparaisons à zéro) sur plus petit...
    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.

  8. #28
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Médinoc
    Je rappelle que les paramètres de fonction sont facilement promus en Int, et que les procs les plus rapides ne savent pas faire des opérations (même des comparaisons à zéro) sur plus petit...
    ... et je complete que la norme precise que le resultat des operateurs relationnels (< > <= >=) et des operateurs d'egalite (== !=) est de type int (6.5.8, 6.5.9). int est donc un type naturel pour quelque-chose qui se retrouve dans un if()...
    Citation Envoyé par souviron34
    bah à ce compte-là pourquoi utiliser un booléen ??
    Exactement. Perso, je n'en ai jamais eu besoin...

  9. #29
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par DaZumba
    ..Exactement. Perso, je n'en ai jamais eu besoin...
    Moi une seule fois, pour compléter des types de données (réels, entier, chaines, char, et booléen (donc char ) ).

  10. #30
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Le débat portant sur la justification d'un type booléen fait rage, à ce que je vois, mais je rappelle que ce n'est pas le sujet de ce topic. En revanche, suite à une des réponses de souviron34 -que je remercie donc, en plus de ceux qui ont daigné répondre ^^ -, que voilà :
    Une erreur de longueur d'allocation (débordement) :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    This->list[This->count-1] = malloc( (strlen(path)+1) * sizeof (char));
    Avec cette modification, le programme s'exécute sans problème, que ce soit en mode release ou debug. Après avoir réfléchis un peu par la suite, j'ai émis l'hypothèse que cette distinction debug/release soit due à une potentielle initialisation du segment de mémoire utilisé par le programme (par le debugger) à 0. Ainsi, l'absence du caractère NULL final serait comblée par sa présence au sein du reste de la mémoire...

    Enfin bref, tout ça pour dire que l'aiguille a finalement été trouvée dans cette botte de foin, et que le sujet est conséquemment résolu

    Merci à vous tous.

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

Discussions similaires

  1. Mon code fonctionne en mode debug et pas en release
    Par teddyalbina dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 22/02/2011, 00h16
  2. Code marche sur google chrome mais pas sur ie
    Par evaflint69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 29/10/2009, 17h09
  3. projet qui marche en mode "hosted" mais pas sous Tomcat
    Par sdesbure dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 02/02/2009, 23h54
  4. Mon Alias marche sur le Serveur mais pas sur le Client
    Par Aquellito dans le forum Windows Serveur
    Réponses: 12
    Dernier message: 26/11/2008, 09h49

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