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 :

Problème d'affichage du terminal


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut Problème d'affichage du terminal
    Algo_TP5.7z

    Bonjour je vous contacte car j'ai un petit soucis avec ce code je n'arrive pas à avoir un résultat dans le terminal. Pourtant le code ne m'indique aucune erreur?

    En espérant que vous puissiez m'aider.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut Même chose pour un autre code
    J'ai également la même chose pour deux autres codes.

    En espérant que vous puissiez m'aider car pourtant mes codes je pense qu'ils sont bons non ?

    Algo_TP2.7z
    Algo_TP1.7z

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Citation Envoyé par Kenshin01 Voir le message
    Algo_TP5.7z

    Bonjour je vous contacte car j'ai un petit soucis avec ce code je n'arrive pas à avoir un résultat dans le terminal. Pourtant le code ne m'indique aucune erreur?

    En espérant que vous puissiez m'aider.
    Bonjour,
    le code est bugué :
    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
    $ valgrind --leak-check=full --track-origins=yes --show-reachable=yes ./arbreB 
    ==43310== Memcheck, a memory error detector
    ==43310== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
    ==43310== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
    ==43310== Command: ./arbreB
    ==43310== 
    ==43310== Invalid write of size 8
    ==43310==    at 0x109469: nouveau_noeud (arbreB.c:143)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a40058 is 16 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310== 
    ==43310== Invalid write of size 8
    ==43310==    at 0x109475: nouveau_noeud (arbreB.c:144)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a40048 is 0 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310== 
    ==43310== Invalid write of size 8
    ==43310==    at 0x109481: nouveau_noeud (arbreB.c:145)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a40050 is 8 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310== 
    ==43310== Invalid read of size 8
    ==43310==    at 0x109511: inserer (arbreB.c:170)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a40048 is 0 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310== 
    ==43310== Invalid write of size 8
    ==43310==    at 0x109469: nouveau_noeud (arbreB.c:143)
    ==43310==    by 0x109538: inserer (arbreB.c:181)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a400a8 is 16 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x109538: inserer (arbreB.c:181)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310== 
     
    … et ça continue … encore et encore …

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Même pour les codes TP1 et 2 ?
    Je ne comprends pas pourquoi pourtant je n'ai aucune erreur non ?

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Ce n'est pas parce que le compilo ne produit pas de messages d'erreurs que pour autant le code est correct. Je n'ai pas même lu ton code, je n'ai qu'utilisé des outils pour débuguer. En l'occurrence, j'ai utilisé valgrind pour vérifier tes accès mémoires, et ils sont fautifs, le log te donne même les endroits … Par exemple pour la première erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ==43310== Invalid write of size 8
    ==43310==    at 0x109469: nouveau_noeud (arbreB.c:143)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==  Address 0x4a40058 is 16 bytes after a block of size 8 alloc'd
    ==43310==    at 0x483E7C5: malloc (vg_replace_malloc.c:380)
    ==43310==    by 0x10944A: nouveau_noeud (arbreB.c:139)
    ==43310==    by 0x1094BC: inserer (arbreB.c:158)
    ==43310==    by 0x1099DA: main (arbreB.c:388)
    ==43310==
    valgrind te dit que dans main à la ligne 388 tu appelles la fonction inserer qui elle-même appelle nouveau_noeud en ligne 158 ; dans nouveau_noeud en ligne 139 tu alloues un espace mémoire de taille 8 bytes. Dans la même fonction tu essayes d'écrire 16 bytes après cette portion de mémoire allouée ! Cela provoque une erreur …
    Alors si on regarde de plus près le code de la fonction nouveau_noeud :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    b_t nouveau_noeud(element_t a){
      ab_t x;
      x = malloc(sizeof(ab_t*));
      if (!x) {
        perror("Echec malloc");
      }
      x->parent = NULL;
      x->gauche = NULL;
      x->droite = NULL;
      x->e = a;
      return x;
    }
    on voit que tu alloues de la mémoire mais que très certainement le sizeof est incorrect. Je suppose que tu as voulu écrire x = malloc(sizeof(struct noeud_s). C'est toujours, mais toujours, une mauvaise idée que de cacher un pointeur dans un typedef.
    Il est aussi souvent bien plus simple d'écrire x = malloc(sizeof *x) ; au moins tu es certain que la bonne taille sera allouée (dans la très grande majorité des cas, il y aura toujours quelques exceptions, mais en ce qui te concerne ce sera toujours bon).

    J'ai débusqué une erreur dans ton code sans même le lire entièrement ni même essayer de le comprendre. C'est grâce aux outils de débugage … c'est indispensable de savoir s'en servir, car débuguer vcia un forum est non seulement lent mais il ne te permettra pas d'apprendre de tes erreurs puisqu'au fond tu ne les trouves pas.

    Il va falloir apprendre à utiliser valgrind et un debuger pas à pas …

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Ca y est j'ai finalement bien reussi a faire marcher le code par contre , pour les TP1 et 2 est ce le même problème? Parce que au niveau des allocations je n'ai pas vu de problème particulier ?

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Je t'ai montré comment faire, n'as-tu pas essayé ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2019, 14h20
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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