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

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    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 : 27
    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 : 53
    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 : 27
    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 : 53
    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 : 27
    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 : 53
    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é ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Comment je dois télécharger valgrind ?

  9. #9
    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 : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    euh … bah oui … comment veux-tu bosser sans les outils adéquats ?
    tu te rends compte que j'ai trouvé quelques erreurs sans connaître ton code ni même le lire … alors que toi tu pataugeais, toi qui l'as écrit. Ce n'est pas une question de savoirs ou d'expérience, c'est juste une question d'outils.

    mais bon, sur quelle plateforme développes-tu ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Je travaille sur eclipse

  11. #11
    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 : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    plateforme =
    quel OS : windows ? mac ? linux ?
    quel compilo : gcc ? clang ? autre ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Windows 10 et compilateur GCC

  13. #13
    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 : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Je ne développe pas sous windows, mais on peut trouver : Existe-t-il un bon substitut Valgrind pour Windows?.

    Il est impératif, lorsqu'on développe, de savoir utiliser ce genre d'outils.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Bon j'ai télécharger VerySleepy et ça ne me donne pas d'erreur je ne comprends plus rien..

  15. #15
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    J'ai seulement pris le TP1 pour voir un peu de quoi il en retourne.

    Tu utilises une première fonction chargeGraphe(); pour initialiser deux tableaux imbriqués. Voila quelques remarques d'ordre générales pour commencer :
    • Le nom de la fonction doit être le plus explicite possible. Si elle initialise des données, on n'utilise pas le mot "charge" qui sous-entend que des données particulières vont être utilisées ;
    • En programmation C on ne caste pas malloc(); ;
    • Si une erreur survient lors de l'allocation mémoire on ne quitte pas l'application comme un goret ;
    • Si une erreur d'allocation mémoire pour le deuxième tableau survient il faut désallouer le premier avant de sortir ;
    • On teste les paramètres en entrée. Si l'utilisateur entre un nombre inférieur à 1. Que se passe-t-il ?


    Voila ce que pourrait donner ta fonction en fonction des remarques précédentes :
    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
    int **initGraphe(int n) {
      /* test du paramètre */
      if (n<1) {
        fprintf (stderr, "n doit être supérieur à 0 dans %s ();\n", __func__);
        return NULL;
      }
     
      int **adjc ;
     
      // On initialise le premier tableau
      adjc = malloc(n*sizeof(int**));
      if (adjc==NULL) {
        fprintf (stderr, "Probleme d'allocation memoire pour le premier tableau dans %s ();\n", __func__);
        return NULL;
      }
     
      // On initialise le deuxieme tableau
      int i,k;
      for(i=0;i<n;i++) {
        adjc[i] = malloc(n*sizeof(int));
     
        if( adjc[i]==NULL) {
          fprintf (stderr, "Probleme d'allocation memoirepour le deuxième tableau dans %s ();\n", __func__);
     
          /* Libération de la première partie du deuxième tableau déjà allouée */
          for (int j=0; j < i; j++)
            free (adjc[j]);
     
          /* Libération du premier tableau */
          free (adjc);
          return NULL;
        }
      }
     
      for(i=0;i<n;i++){
        for(k=0;k<n;k++){
          adjc[i][k]=0;
        }
      }
     
      return adjc;
    }
    Comme tu peux le voir cette fonction renvoie un pointeur valide ou bien NULL en cas d'erreur. La fonction appelante devra donc vérifier ce qu'elle reçoit et faire le traitement en fonction. Tu utilises d'ailleurs dejà cette méthode avec malloc ();. Quitter le programme ne pouvoir se faire que depuis la fonction main ();. Ainsi, puisque cette fonction d'initialisation est appelée justement dans main (); il est facile de quitter proprement ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main (void) {
    
      int**adjacence;
      int n = 4;
    
      adjacence = chargeGraphe(n);
    
      if (!adjacence)
        exit (1);
      ...
    La fonction marquerVoisins(); :

    Sans chercher à comprendre l'algorithme de cette dernière voila ce qui me choque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      // Allouer le tableau marques de taille «n»
      marques=(int*)malloc(sizeof(int));
      if(marques==NULL) {
        printf("Probleme d'allocation memoire\n");
      }
    Tu ne remarques rien ? Dans le commentaire il est dit d'allouer un tableau de taille n. Déjà comment récupères-tu n ? Ensuite l'allocation proprement dite n'alloue qu'un espace mémoire pour un int.

    Passé cette allocation tu scrutes cette mémoire avec la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for (x=0; x < ordre; x++)
        marques[x]=0;
    Je me dis à ce niveau qu'en fait ordre doit valoir n. Il faut modifier la formulation de ton allocation de marques.

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(i=0;i<n;i++) {
        adjc[i] = malloc(n*sizeof(int));
     
        if( adjc==NULL) {
          fprintf (stderr, "Probleme d'allocation memoirepour le deuxième tableau dans %s ();\n", __func__);
          /* Libération du premier tableau */
          free (adjc);
          return NULL;
        }
      }
    Je suppose que tu as oublié [i] sur la ligne en gras.
    Mais surtout, si une allocation échoue, il faut libérer toutes les précédentes qui ont réussi.
    Pour ça, c'est plus simple de faire une unique grosse allocation n*n que multiplier ça en matrice.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  17. #17
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Je n’ai pas voulu trop compliquer les explications. Je ne suis pas sûr qu’il en soit à ce niveau

    Édit : j’ai modifié le code suite à ta remarque justifiée sur la vérification de l’allocation mémoire.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 51
    Par défaut
    Merci pour les conseils j'ai réussi a faire marche les TP0, 3, 4 et 5
    Mais pour le 1 et 2 je ne comprends pourquoi rien ne s'affiche.
    Je n'arrive pas à faire marcher la fonction afficheGraphe

  19. #19
    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 : 53
    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
    Bon j'ai télécharger VerySleepy et ça ne me donne pas d'erreur je ne comprends plus rien..
    C'est un des memory profilers que tu aurais dû télécharger ⇒ DrMemory ou UMDH … mais je ne sais pas ce qu'ils vallent.
    N'oublie pas de compiler en utilisant les options -Wall -Wextra pour les warnings, et le -g pour le debugging.

    Citation Envoyé par Kenshin01 Voir le message
    Merci pour les conseils j'ai réussi a faire marche les TP0, 3, 4 et 5
    Mais pour le 1 et 2 je ne comprends pourquoi rien ne s'affiche.
    Je n'arrive pas à faire marcher la fonction afficheGraphe
    Tu as bien un mode debug avec eclipse, non ? un mode où tu peux mettre des points d'arrêts, puis exécuter pas à pas en scrutant la valeur des variables ?
    Il faut que utilises ça pour débuguer plutôt qu'un forum, il y a de la doc en plus : debug + eclipse.

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