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 :

maudite fonction malloc


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Par défaut maudite fonction malloc
    Salut tous,
    Bon voilà un petit code qui veut pas se faire compiler, j'ai essayé avec mais toujours pas de solution, j'espère que vous pourriez m'indiquer la source du problème
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    typedef struct
    {
           char M[10];
           char N[12];
           char Pr[20];
           char SB[6];
           char SN[6];
    }employe;
    employe *table;
    table=(employe*)malloc(100,sizeof(employe));
    int *i,*NE;
    float *TT,*TP,*T,*P;
    int main()
    {
        puts("\tProgramm de calcul des salsires des employes");
        printf("Entrer le nombre d'employes");
        scanf("%d",NE);
        /*Saisie des informations des employes*/
        for(*i=0;*i<NE;i++)
        {
           system("cls");
           printf("Informations de l'employe numero %d",*i+1);
           printf("Entrer la matricule:");
           gets(table+i<-M);   /* gets(table[i].M) = scanf("%s",table[i].M) avec table[i] c'est *(table+i) et le . c'est <- */
           printf("Entrer le nom:");
           gets(table+i<-N);
           printf("Entrer le prenom:");
           gets(table+€i<-Pr);
           do
           {
                                printf("Entrer le salaire brut:");
                                gets(table+i<-SB);
           }while(*(table+i<-SB)<0);
        }
        /*Calcul*/
        for(*i=0;*i<NE;i++)
                          if((*(table+i<-SB)>0)&&(*(table+i<-SB)<=500))
                          {
                                 *TT=0;
                                 *TP=0.2;
                                 *T=*(table+i<-SB)**TT;
                                 *P=*(table+i<-SB)**TP;
                                 *(table+i<-SN)=*(table+i<-SB)-*T+*P;
                          }
                          else
                                 if((*table+i<-SB)>500)&&(*(table+i<-SB)<=3000))
                                 {
                                         *TT=0.17;
                                         *TP=0.3;
                                         *T=*(table+i<-SB)**TT;
                                         *P=*(table+i<-SB)**TP;
                                         *(table+i<-SN)=*(table+i<-SB)-*T+*P;
                                 }
                                 else
                                 { 
                                         *TT=0.35;
                                         *TP=0.4;
                                         *T=*(table+i<-SB)**TT;
                                         *P=*(table+i<-SB)**TP;
                                         *(table+i<-SN)=*(table+i<-SB)-*T+*P;
                                 }
         for(*i=0;*i<NE;i++)
             printf("Le salaire net de l'employe numero %d est : %s\n",*i+1,*(table+i<-SN));
         getch();
    }
      0  0

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 080
    Par défaut
    ...
    Waw

    Tel quel, je n'ai pas du tout envie d'essayer de t'aider.
    Tu sais pourquoi ?

    Parce que, meme si ton message est poli, tu nous dis rien. Tu nous claque un code entier en disant "ca marche pas, faite le moi marcher".

    Deja, si il ne compile pas, c'est que ton compilateur te retourne des erreurs. Ou sont-elle ? Qu'as tu essayer de faire pour arranger le programme ? Quels sont tes idée ?

    Juste en regardant : Tu as mis beaucoup de variable en global, c'est tres mauvais ! De plus tu fais un malloc en dehors de toutes fonctions, c'est interdit !
      0  0

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    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 385
    Par défaut
    En plus, tu utilises gets() (dangereuse), getch() (non-standard), et de nos jours il n'est plus conseillé de caster le retour de malloc().
    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.
      0  0

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table=(employe*)malloc(100,sizeof(employe));
      0  0

  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
    pourriez m'indiquer la source du problème
    Il n'y a pas une source à ton problème : ton programme est totalement incohérent et à reprendre en totalité.
    C'est un florilège d'erreurs. Pour continuer la liste (non exhaustive) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *i,*NE; .....  //Pourquoi tous ces pointeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d",NE); // NE non initialisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(*i=0;*i<NE;i++) 
    // *i = 0 : i non initialisé -> plantage
    //  *i<NE : Comparaison d'un int (*i) et d'un pointeur NE (de plus toujours pas initialisé)
    // i ++ :Incrémentation du pointeur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    gets(table+i<-M);
    // Que signifie cet argument ? 
    //table est un pointeur, i également. Il est interdit de sommer deux pointeurs.
    // M n'est pas défini.
    // Si cette expression pouvait être évaluée, le résultat serait un booléen (un entier) 
    //or gets() n'attend pas du tout un entier comme argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gets(table+i<-Pr);// sans commentaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    *TT=0;
    *TP=0.2;
    *T=.....
    *P=.....
    // Aucun de ces pointeurs n'est initialisé.
    ....
      0  0

Discussions similaires

  1. aide sur fonction malloc
    Par chuko dans le forum C
    Réponses: 4
    Dernier message: 27/08/2008, 13h21
  2. Le bloc renvoyé par la fonction malloc
    Par clement_ dans le forum C
    Réponses: 4
    Dernier message: 08/10/2007, 16h12
  3. Réponses: 20
    Dernier message: 13/02/2007, 12h50
  4. Fonction malloc pour allocation
    Par Maria1505 dans le forum C
    Réponses: 6
    Dernier message: 06/11/2006, 17h38
  5. fonction malloc en c
    Par Invité(e) dans le forum C
    Réponses: 2
    Dernier message: 16/04/2006, 00h34

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