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 :

mon programme se plante après seulement quelques secondes


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 9
    Points
    9
    Par défaut mon programme se plante après seulement quelques secondes
    bonjour,
    voici mon code

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    //structure de date
    typedef struct DATE {
            int min;
            int h;
            int j;
            int m;
            int a;
            }DATE;
    //la liste des réunions 
    typedef struct Reunion {
            char* titre;
            char* objectifs;
            char* ordrejour;
            int duree;
            DATE date;
            DATE date_butoire;
            struct Reunion *nxt;
            }Reunion;
     
    //structure pour pointer vers la tete de la liste
    typedef struct Lister
    {
           Reunion *tete;
    }Lister;
     
    //fonction qui rempli les structures de date
    void remplirdate (DATE *D,int minute,int heure,int jour,int mois,int annee) {
         D->min = minute;
         D->h = heure;
         D->j = jour;
         D->m = mois;
         D->a = annee;
         }
     
    //fonction qui initialise la liste
    Lister *initialisationr()
    {
          Lister *lister = (Lister*)malloc(sizeof(lister));
          Reunion *elementr = (Reunion*)malloc(sizeof(elementr));
          if (lister == NULL || elementr == NULL)
          {
             exit(EXIT_FAILURE);
          }
          elementr->titre = NULL;
          elementr->objectifs = NULL;
          elementr->ordrejour = NULL;
          elementr->duree=0;
          elementr->nxt = NULL;
          lister->tete = elementr;;
    return lister;
    }
     
    //fonction pour ajout à la liste au debut
    void *insertionr(Lister *lister, char *nvtitre,char *nvobjectifs,char *nvordre_jour,int nvduree,DATE nvdate,DATE nvdate_butoire)
    {
       Reunion *nouveaur =(Reunion*) malloc(sizeof(nouveaur));
       nouveaur->titre = nvtitre;
       nouveaur->objectifs = nvobjectifs;
       nouveaur->ordrejour = nvordre_jour;
       nouveaur->duree = nvduree;
       nouveaur->date = nvdate;
       nouveaur->date_butoire = nvdate_butoire;
       nouveaur->nxt = lister->tete;
       lister->tete = nouveaur;
    }
     
    //affichage de la liste
    void afficherr(Lister *lister)
    {
         if (lister == NULL)
         {
            exit(EXIT_FAILURE);
         }
         Reunion *actuel = lister->tete;
         while (actuel->nxt != NULL)
         {
          printf("titre : %s\nobjectifs : %s\nordre du jour : %s\ndate : %d/%d/%d\ndurée : %d min\ndate butoire : %d/%d/%d\n", actuel->titre,actuel->objectifs ,actuel->ordrejour ,actuel->date.j,actuel->date.m,actuel->date.a ,actuel->duree,actuel->date_butoire.j,actuel->date_butoire.m,actuel->date_butoire.a);
          actuel = actuel->nxt;
         }
    }
     
    //sauvgarde de la liste dans un fichier
    void saver (char* nom, Lister *lister) {
         Reunion *actuel = lister->tete;
         FILE *fichier = fopen(nom,"w");
         while (actuel->nxt != NULL)
         {
          fprintf(fichier,"titre : %s\nobjectifs : %s\nordre du jour : %s\ndate : %d/%d/%d\ndurée : %d min\ndate butoire : %d/%d/%d\n",actuel->titre,actuel->objectifs ,actuel->ordrejour ,actuel->date.j,actuel->date.m,actuel->date.a ,actuel->duree,actuel->date_butoire.j,actuel->date_butoire.m,actuel->date_butoire.a);
     
          actuel = actuel->nxt;
         }
         fclose(fichier);
    }
     
    main () {
         Lister *maLister = initialisationr(); //declaration et initialisation de la liste 
         DATE DA,DAB; 
         remplirdate(&DA,0,0,10,4,2020);//affectation des valeurs à la structure 
         remplirdate(&DAB,0,0,20,4,2020);
         insertionr(maLister,"titre","objectifs","ordre du jour",50,DA,DAB);                                                           
         saver("test.txt",maLister);
         afficherr(maLister);
     
     
         getch();
    }
    je ne sais pas d'ou peut venir le pb , la seul indication que j'ai est donné par le débogueur : (en langage assembleur )
    help les gars je ne sais plus ou donner la tête
    et merci avant tout.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Salut,
    tu écris les malloc de manière un peu bizarre (et fausse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reunion *elementr = (Reunion*)malloc(sizeof(elementr));
    sizeof(elementr) ne veut pas dire grand chose, elementr étant la variable pour laquelle tu cherches à allouer de la mémoire. sizeof étant sensé calculer la taille d'un type de donnée, la taille à lui passer est cette de ton type (ici de Reunion)

    Si tu modifies tes malloc (les trois présents dans ton code ont le même problème) ton programme fonctionne.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par pythéas Voir le message
    Salut,
    tu écris les malloc de manière un peu bizarre (et fausse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reunion *elementr = (Reunion*)malloc(sizeof(elementr));
    sizeof(elementr) ne veut pas dire grand chose, elementr étant la variable pour laquelle tu cherches à allouer de la mémoire. sizeof étant sensé calculer la taille d'un type de donnée, la taille à lui passer est cette de ton type (ici de Reunion)

    Si tu modifies tes malloc (les trois présents dans ton code ont le même problème) ton programme fonctionne.
    merci

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet, c'est Reunion *elementr = malloc(sizeof *elementr); qu'il faut utiliser: On passe à malloc() la taille de l'élément pointé plutôt que celle du pointeur.
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programme qui plante après installation
    Par bruno bdf dans le forum C#
    Réponses: 17
    Dernier message: 22/06/2015, 18h23
  2. Réponses: 0
    Dernier message: 11/01/2014, 02h16
  3. [vb6] problème : mon programme se plante
    Par sohaieb dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 15/05/2013, 19h46
  4. [SQL-Server] Mon script se plante après 5830 lignes
    Par ambe_fr dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/11/2012, 15h42
  5. Mon programme se bloque après quelques heures!
    Par mbouzouita dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/11/2007, 21h51

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