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 :

j'ai un trou de memoire


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut j'ai un trou de memoire
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        char  choix[1];   
     
        printf("VIEW   : v ou V --> Consulter les informations\n");
        printf("UPDATE : u ou U --> Mettre à jour les informations d'un demandeur\n");
        printf("DELETE : d ou D --> Supprimer un demandeur\n");
        printf("ADD    : a ou A --> Ajouter un demandeur\n");
        printf("SHOW   : s ou S --> Montrer la représentation de l'arbre binaire\n");
     
     
        printf("Commande:");
        scanf("%s",choix);
     
        if (choix = 'v')
         {
                    printf("cool");
         }
     
        else if (choix = 'v')
         {
                    printf("cool2");
         }
      system("PAUSE");	
      return 0;
    }
    Lorsque je compile le compilateur DEV C++ me dit qu'il y a des erreurs de compilations

    mon programme ne veut pas compiler
    je me rapel plus comment on fait

    dsl je me suis tromper de prog

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        char  choix[1];   
     
        printf("VIEW   : v ou V --> Consulter les informations\n");
        printf("UPDATE : u ou U --> Mettre à jour les informations d'un demandeur\n");
        printf("DELETE : d ou D --> Supprimer un demandeur\n");
        printf("ADD    : a ou A --> Ajouter un demandeur\n");
        printf("SHOW   : s ou S --> Montrer la représentation de l'arbre binaire\n");
     
     
        printf("Commande:");
        scanf("%s",choix);
     
        if (choix = 'v')
         {
                    printf("cool");
         }
     
        else if (choix = 'u')
         {
                    printf("cool2");
         }
         else if (choix = 'd')
         {
                    printf("cool3");
         }
        else if (choix = 'a')
         {
                    printf("cool4");
         }
        else if (choix = 's')
         {
                    printf("cool5");
         }
      system("PAUSE");	
      return 0;
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Par défaut
    hello !


    regarde bien tes tests, ici :
    et ici :
    y a comme un défaut ...

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Comme dirait Manu, un compilateur bien configuré t'aurais averti du problème

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        char  choix[1];   
     
    /* [...] */
     
     
        scanf("%s",choix);
    Attention à scanf et à tous ses problèmes... Attention au dépassement de tampon ! (i.e : que va-t-il se passer si l'utilisateur entre une chaîne assez longue plutôt qu'une simple lettre ? )

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    De toute façon
    est incorrect :
    - il faudrait ==
    - choix est un tableau pas un char

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    tu dois avoir un fros trou de mémoire alors

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    Tiens c'est bientôt Noël... :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        char  choix;
     
        printf("VIEW   : v ou V --> Consulter les informations\n");
        printf("UPDATE : u ou U --> Mettre ` jour les informations d'un demandeur\n");
        printf("DELETE : d ou D --> Supprimer un demandeur\n");
        printf("ADD    : a ou A --> Ajouter un demandeur\n");
        printf("SHOW   : s ou S --> Montrer la reprisentation de l'arbre binaire\n");
     
     
        printf("Commande:");
        choix=getchar();
     
            choix=tolower(choix);
     
            switch(choix)
            {
                    case 'v' :
                                            printf("cool-1\n");
                                            break;
                    case 'u' :
                                            printf("cool-2\n");
                                            break;
                    case 'd' :
                                            printf("cool-3\n");
                                            break;
                    case 'a' :
                                            printf("cool-4\n");
                                            break;
                    case 's' :
                                            printf("cool-5\n");
                                            break;
                    default :
                                            printf("boufon! t'as tapi la mauvaise lettre!\n");
                                            break;
            }
            return 0;
    }
    Tu devrais mettre un while pour éviter de faire terminer ton binaire...



    PS : testé sous Solaris avec gcc...

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Pour les réglages du compilateur c'est par ici :
    http://emmanuel-delahaye.developpez....fg_compilo_gcc
    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
    #include <stdio.h>
     
    int main (void)
    {
       char choix;
       int ret;
       puts ("VIEW   : v ou V --> Consulter les informations\n"
             "UPDATE : u ou U --> Mettre à jour les informations d'un demandeur\n"
             "DELETE : d ou D --> Supprimer un demandeur\n"
             "ADD    : a ou A --> Ajouter un demandeur\n"
             "SHOW   : s ou S --> Montrer la représentation de l'arbre binaire");
     
       do
       {
          char temp[2];
          printf ("Commande:");
          ret = scanf ("%1[vVuUdDaAsS]", temp);
          scanf ("%*[^\n]"), getchar ();
          if (ret == 1)
             choix = temp[0];
       }
       while (ret != 1);
     
       switch (choix)
       {
       case 'v':
       case 'V':
          puts ("cool");
          break;
       case 'u':
       case 'U':
          puts ("cool2");
          break;
       case 'd':
       case 'D':
          puts ("cool3");
          break;
       case 'a':
       case 'A':
          puts ("cool4");
          break;
       case 's':
       case 'S':
          puts ("cool5");
       }
     
       getchar ();
       return 0;
    }

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    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 : 12 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    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
    switch (choix)
       {
       case 'v':
       case 'V':
          puts ("cool");
          break;
       case 'u':
       case 'U':
          puts ("cool2");
          break;
       case 'd':
       case 'D':
          puts ("cool3");
          break;
       case 'a':
       case 'A':
          puts ("cool4");
          break;
       case 's':
       case 'S':
          puts ("cool5");
       }
    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
    switch (tolower(choix))
       {
       case 'v':
          puts ("cool");
          break;
       case 'u':
          puts ("cool2");
          break;
       case 'd':
          puts ("cool3");
          break;
       case 'a':
          puts ("cool4");
          break;
       case 's':
          puts ("cool5");
          break;
       }
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Je sais mais j'évite un appel de fonction pour si peu.

  11. #11
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch (choix >= 'A' && choix <= 'Z' ? choix + ('a' - 'A') : choix)
    {
    ...

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    donc pour résumer, ça donnerait :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        char  choix;
     
        printf("VIEW   : v ou V --> Consulter les informations\n");
        printf("UPDATE : u ou U --> Mettre ` jour les informations d'un demandeur\n");
        printf("DELETE : d ou D --> Supprimer un demandeur\n");
        printf("ADD    : a ou A --> Ajouter un demandeur\n");
        printf("SHOW   : s ou S --> Montrer la reprisentation de l'arbre binaire\n");
     
     
        printf("Commande:");
        choix=getchar();
     
            switch (choix >= 'A' && choix <= 'Z' ? choix + ('a' - 'A') : choix)
            {
                    case 'v' :
                                            printf("cool-1\n");
                                            break;
                    case 'u' :
                                            printf("cool-2\n");
                                            break;
                    case 'd' :
                                            printf("cool-3\n");
                                            break;
                    case 'a' :
                                            printf("cool-4\n");
                                            break;
                    case 's' :
                                            printf("cool-5\n");
                                            break;
                    default :
                                            printf("boufon! t'as tapi la mauvaise lettre!\n");
                                            break;
            }
            return 0;
    }
    je pense qu'on ne peux pas mieux niveaux "optimisation"...

  13. #13
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Non c'était un blague, vaut mieux utiliser toupper/tolower qu'ecrire cette ribambelle de code illisible (ou alors avoir une macro qui fait ça), mais franchement économiser UN appel de fonction c'est comme se tater entre prendre un int ou un short pour une variable locale : c'est completement hors de propos

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    Citation Envoyé par Gruik Voir le message
    Non c'était un blague, vaut mieux utiliser toupper/tolower qu'ecrire cette ribambelle de code illisible (ou alors avoir une macro qui fait ça), mais franchement économiser UN appel de fonction c'est comme se tater entre prendre un int ou un short pour une variable locale : c'est completement hors de propos
    Alors ça c'est pas très marrant...au début je doutais...puis j'me suis dit mais non c'est le modérateur, il sait ce qu'il dit quand même...mais d'un côté il faudrait peut-être testé, peut-être qu'on gagne quelques µs...qui sait ? Mais là j'ai pas le courage ce soir...

  15. #15
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Déjà tester, avec tolower() on perd rien parcontre il y a d'autre fonction parfois ou...
    C'est juste une habitude que j'avais prise à cause du boulot ou on faisait des gros calculs en boucle et la le gain se faisait sentir mais bien sûr dans ce cas précis ça ne sert strictement à rien.

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Déjà tester, avec tolower() on perd rien parcontre il y a d'autre fonction parfois ou...
    C'est juste une habitude que j'avais prise à cause du boulot ou on faisait des gros calculs en boucle et la le gain se faisait sentir mais bien sûr dans ce cas précis ça ne sert strictement à rien.
    tu te rappelles des fonctions où l'on peut sentir la différence ?

  17. #17
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Je pourrais en citer plusieurs mais ça ne voudrait strictement rien dire dans la mesure ou cela peut varier d'une plateforme à une autre, d'un compilateur à un autre, d'une librairie à un autre, bref c'est à toi de faire les tests qui vont bien et voir les gains ou pertes de performance.

  18. #18
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par jeremy13 Voir le message
    Alors ça c'est pas très marrant...au début je doutais...puis j'me suis dit mais non c'est le modérateur, il sait ce qu'il dit quand même...mais d'un côté il faudrait peut-être testé, peut-être qu'on gagne quelques µs...qui sait ? Mais là j'ai pas le courage ce soir...
    Désolé 8) C'était aussi pour montrer un peu de technique..
    Apres pour le gain de temps, je voulais dire ceci : éviter d'avoir ce genre de considérations, enfin faut éviter de perdre du temps à se poser des questions là dessus, vaut mieux chercher la simplicité du code (le plus court, le plus simple, le plus naturel, le moins tordu)

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    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 : 12 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Déjà tester, avec tolower() on perd rien parcontre il y a d'autre fonction parfois ou...
    Boaf ça n'a pas influencé mon code mais juste pour info: c'est utile de savoir que tolower() c'est plus souvent une macro qu'une fonction...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. trou de memoire
    Par looping dans le forum Langage
    Réponses: 3
    Dernier message: 13/08/2008, 07h43
  2. [LG]Mémoire dynamique
    Par FJUILLET dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2004, 11h15
  3. [swing] probleme de memoire
    Par leBigouden dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/05/2003, 14h19
  4. gestionnaire de memoire
    Par elone dans le forum C
    Réponses: 2
    Dernier message: 23/01/2003, 00h31
  5. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02

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