Bug avec un printf()
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Bug avec un printf()



  1. #1
    ti7bo7

    Bug avec un printf()


    ------

    Bonjour,

    C'est une erreur assez spectaculaire.

    J'ai un algo qui tourne (trop long pour le mettre sur le topic). A la fin de cet algo je fais un
    Code:
    printf("mavaleur : %f\n, mavaleur);
    Jusqu'ici tout se passe bien.

    Mais quand j'enlève ce printf, plus rien ne fonctionne et l'algo ne fait pas le travail demandé !

    Je me suis dit que c'est un problème de temps, j'ai donc remplacé le printf par un sleep(0.5) ou même 2 boules for imbriqués. Rien n'y fait seul avec le printf l'algo fonctionne.

    De plus, si j'écris
    Code:
    printf("mavaleur : %f, mavaleur);
    ça ne marche pas ! il faut en plus rajouter le
    Code:
    \n
    sans le \n ça fonctionne pas non plus

    Ca fonctionne si je fais uniquement ça aussi :
    Code:
    printf("\n");
    Je n'ai jamais vu ça ..

    Quelqu'un aurai des idées ?

    Merci

    -----
    Dernière modification par ti7bo7 ; 28/11/2012 à 22h02.

  2. #2
    kwariz

    Re : Bug avec un printf()

    Bonjour,

    j'ai une bonne et une mauvaise nouvelle. La bonne est que printf n'est pas bugué, la mauvaise est que ton algo l'est.
    Ce genre de symptôme est typique d'un heisenbug. Comme il s'agit d'un programme en C j'essayerais :

    * de ne pas ignorer les warnings émis par le compilo
    * de rajouter certaines options de compilation pour afficher des warnings supplémentaires
    * d'utiliser valgrind comme outil de diagnostique rapide
    * de faire tourner l'appli en mode debug et de bien vérifier les accès mémoire (variable non initialisée, tableau accédé en dehors des limites, etc) sur lesquels valgrind aura râlé.

  3. #3
    polo974

    Re : Bug avec un printf()

    les "pinces à linges" vont toujours par 2...
    Jusqu'ici tout va bien...

  4. #4
    ti7bo7

    Re : Bug avec un printf()

    Citation Envoyé par polo974 Voir le message
    les "pinces à linges" vont toujours par 2...
    ??????????

  5. A voir en vidéo sur Futura
  6. #5
    ti7bo7

    Re : Bug avec un printf()

    Citation Envoyé par kwariz Voir le message
    Bonjour,

    j'ai une bonne et une mauvaise nouvelle. La bonne est que printf n'est pas bugué, la mauvaise est que ton algo l'est.
    Ce genre de symptôme est typique d'un heisenbug. Comme il s'agit d'un programme en C j'essayerais :

    * de ne pas ignorer les warnings émis par le compilo
    * de rajouter certaines options de compilation pour afficher des warnings supplémentaires
    * d'utiliser valgrind comme outil de diagnostique rapide
    * de faire tourner l'appli en mode debug et de bien vérifier les accès mémoire (variable non initialisée, tableau accédé en dehors des limites, etc) sur lesquels valgrind aura râlé.
    J'ai trouvé ce matin mon problème.

    En fait, j'utilisais avant des clock() qui calculais un temps si le clock-1 était différent du clock

    En enlevant printf, le clock-1 était = au clock et du coup je calculais ma valeur et l'algo ne fonctionnais pas.

    Je dois trouver un exemple de timer sur une beaglebone et je n'y arrive pas ...

  7. #6
    lou_ibmix_xi

    Re : Bug avec un printf()

    le coup du "\n" qui influe me fait furieusement penser que tu as oublié (ou tu ignores) que très souvent "printf" est "bufferisé", ce n'est pas parceque tu sors du "printf" que tu as effectivement écrit sur ton pérphérique. L'écriture est effective lorsque:
    - le tampon est plein
    - sur appel explicite de "fflush"
    - sur émission de certains caractères particulier dont "\n" fait parti par défaut.

  8. #7
    ti7bo7

    Re : Bug avec un printf()

    Merci, je ne savais pas.

  9. #8
    bzh_nicolas

    Re : Bug avec un printf()

    Citation Envoyé par ti7bo7 Voir le message
    J'ai trouvé ce matin mon problème.

    En fait, j'utilisais avant des clock() qui calculais un temps si le clock-1 était différent du clock

    En enlevant printf, le clock-1 était = au clock et du coup je calculais ma valeur et l'algo ne fonctionnais pas.

    Je dois trouver un exemple de timer sur une beaglebone et je n'y arrive pas ...
    La première idée qui me viens, c'est que tu utilises mal clock() et donc que tu calcules un peu au petit bonheur la chance (le fait qu'une légère modif autour du printf fasse tout partir en vrille le confirme). Peux-tu poster, la partie du code qui gère le déclenchement de ton calcul ?

  10. #9
    danyvio

    Re : Bug avec un printf()

    Citation Envoyé par ti7bo7 Voir le message
    Bonjour,

    C'est une erreur assez spectaculaire.

    J'ai un algo qui tourne (trop long pour le mettre sur le topic). A la fin de cet algo je fais un
    Code:
    printf("mavaleur : %f\n, mavaleur);
    Jusqu'ici tout se passe bien.
    ça m'étonnerait que ça marche bien, car comme le dit polo974, les pinces à linges fonctionnent par 2....
    Relis bien ta ligne
    cot cot cot codec...
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

Discussions similaires

  1. Bug avec Nero 6
    Par invitee1debd38 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/09/2011, 13h47
  2. printf() icd3 mplab uart1A
    Par pseudoguyanais dans le forum Électronique
    Réponses: 5
    Dernier message: 23/09/2010, 10h57
  3. atmel AT91SAM7X256 et printf ...
    Par invite099898f8 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/04/2008, 09h10
  4. printf pour LCD
    Par Jack dans le forum Électronique
    Réponses: 3
    Dernier message: 10/08/2004, 17h21