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 :

.exe has stopped working


Sujet :

C

  1. #1
    Membre actif
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut .exe has stopped working
    Salut, je vien d'écrire un simulateur de gestionnaire de processus et voila le 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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    #include <stdio.h>
    #include<stdlib.h>
    // déclaration de la liste  des éléments d'un processus
    typedef struct Element Element;
        struct Element
        {
          int nbr;
          Element *suivant;
        };
     
    // déclaration du pointeur premier élément de chaque processus
    typedef struct ListeE ListeE;
         struct ListeE
         {
          Element  *premierE;
         };
    // déclaration de de la liste des  processus
    typedef struct Proc Proc;
          struct Proc
          {
           Element p;
           Proc  *suivant;
          };
    // déclaration du pointeur du premier processus
    typedef struct ListeP ListeP;
          struct ListeP
          {
           Proc *premierP;
          };
    // déclaration de la liste CPU:
    typedef struct Cpu Cpu;
        struct Cpu
        {
          int nbr;
          Cpu *suivant;
         };
    //déclaration du premier élément dans la liste cpu:
     typedef struct ListeC ListeC;
        struct ListeC
        {
         Cpu *premierC;
     
        };
    // déclaration de la liste ES:
    typedef struct Es Es;
         struct Es
         {
          int nbr;
          Es *suivant;
         };
    //déclaration du premier élément dans la liste ES:
     typedef struct ListeeS ListeeS;
         struct ListeeS
         {
          Es *premiereS;
         };
     
    //initialisation de la liste cpu:
    ListeC *initialisationC()
        {
        ListeC *listeC =malloc(sizeof(*listeC));
        Cpu *cpu = malloc(sizeof(*cpu));
        cpu->nbr = 0;
        cpu->suivant = NULL;
        listeC->premierC = cpu;
        return listeC;
        }
    //initialisation de la liste ES:
     ListeeS *initialisationeS()
        {
        ListeeS *listeeS = malloc(sizeof(listeeS));
        Es *es = malloc(sizeof(*es));
        es->nbr = 0;
        es->suivant = NULL;
        listeeS->premiereS = es;
        return listeeS;
        }
     //initialisation de la liste des éléments:
    ListeE *initialisationeL()
        {
        ListeE *listeE = malloc(sizeof(*listeE));
        Element *element = malloc(sizeof(*element));
        element->nbr = 0;
        element->suivant = NULL;
        listeE->premierE = element;
        return listeE;
    }
    //initialisation de la liste des processus
    ListeP  *initialisationp()
        {
        ListeP *listeP =malloc(sizeof(*listeP));
        Proc *p =malloc(sizeof(*p));
        p->suivant = NULL;
        listeP->premierP= p;
        return listeP;
        }
    // ajouter un processus:
    void insertion(ListeP *listeP,ListeE *listeE)
        {
         /* Création du nouvel processus */
         Proc *newP = malloc(sizeof(*newP));
         // initialisation des pointeurs des processus
         Proc *pP= listeP->premierP;
         Proc *predP=listeP->premierP;
         int k=1;
         char repP='o';
         while((repP=='o')&&(pP!=NULL)){
         char repE='o';int i=1;Element *pE=listeE->premierE;Element *predE=listeE->premierE;
            while ((repE=='o')&&(pE!=NULL))
            {
             //création du nouvel élément:
             Element *newE=malloc(sizeof(*newE));
             printf("entrez le",i,"ème élément du",k,"ème  processus");
             printf("pause1");
             int e;
             printf("pause2");
             scanf("%d",e);
             printf("pause3");
             newE->nbr=e;
             printf("pause4");
             predE->suivant=newE;
             newE->suivant=pE;
             i++;
             predE=pE;
             pE=pE->suivant;
             printf("voulez vous insérer un autre élément dans ce processus?o/n");
             scanf("%s",repE);
             }
             //insertion de cette liste des élément dans le processus:
             pE=listeE->premierE;
            // copier les éléments entrés dans la liste des processus:
             while(pE!=NULL)
             {
             newP->p.nbr=pE->nbr;
             predP->suivant=newP;
             newP->suivant=pP;
             }
         k++;
         predP=pP;
         pP=pP->suivant;
         printf("voulez vous insérer un autre processus?o/n");
         scanf("%s",repP);
         }
         }
      //remplissage de la liste cpu, FIFO:
     void  remplissage(ListeP *listeP,ListeeS *listeeS,ListeC *listeC,ListeE *listeE)
        {
           int i=1;Cpu *cp=listeC->premierC; Es *e=listeeS->premiereS;Proc *pP=listeP->premierP;
           while(pP!=NULL)
           {
              Element *pe=listeE->premierE;
              while(pe!=NULL)
              {
                if (pP->p.nbr=1)
                 {
                 cp->nbr=i;
                 cp=cp->suivant;
                 }
                else
                 {
                e->nbr=i;
                e=e->suivant;
              }
           i++;
           pP=pP->suivant;
           }
       }
        }
           //affichage des processus
    void afficherListeP(ListeP *listeP,ListeE *listeE)
        {
        Proc *actuelP = listeP->premierP;Element *p=listeE->premierE;Element *pred=listeE->premierE;
        while (actuelP != NULL)
        {
          while(actuelP->p.suivant!=NULL)
           {
           printf("%d -> ", actuelP->p.nbr);
           pred=p;
           p = p->suivant;
           }
           actuelP = actuelP->suivant;
           printf("NULL\n");
        }
      }
     
     
        //affichage de la liste cpu
        void afficherListecpu(ListeC *listeC)
        {
        Cpu *actuelC = listeC->premierC;
        while (actuelC != NULL)
        {
            printf("%d -> ", actuelC->nbr);
            actuelC = actuelC->suivant;
        }
        printf("NULL\n");
    }
     //affichage de la liste ES
     void afficherListeES(ListeeS *listeeS)
    {
     
     
        Es *actueleS = listeeS->premiereS;
     
        while (actueleS != NULL)
        {
            printf("%d -> ", actueleS->nbr);
            actueleS = actueleS->suivant;
        }
        printf("NULL\n");
    }
     
    //fonction pricipale:
     int main(){
           ListeP *maListeP = initialisationp();
           ListeC *maListeC = initialisationC();
           ListeE *maListeE = initialisationeL();
           ListeeS *maListeeS = initialisationeS();
           insertion(maListeP,maListeE);
           afficherListeP(maListeP,maListeE);
           return 0;
     
             }
    j'ai écris printf("pause") à fin d'identifier la source ou le programme stop l'exécution parceque l'éxecution s'est toujours lancé mais à un certain moment(pause2); un message s'affiche :untitled.exe has stopped working, et le système commence à rechercher des solutions, je n'ai ni erreur ni warning, alors pourquoi ça? et merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il faut utiliser un débogueur mémoire tel que Gdb ou un outil d'analyse mémoire tels que Dr Memory ou Valgrind/Memcheck pour trouver plus précisément d'où vient le problème. C'est plus facile que des printf() à gogo. Voir :
    http://www.developpez.net/forums/d12...ows-and-linux/
    http://www.developpez.net/forums/d44...debugger-code/

    En compilant ton code, j'ai plusieurs warnings, notamment :

    D:\...\dvpez.c|154|warning: suggest parentheses around assignment used as truth value [-Wparentheses]|
    pour la ligne : if (pP->p.nbr=1). == peut-être ?

    D:\Users\pgradot\Documents\C\dvpez.c|117|warning: 'e' may be used uninitialized in this function [-Wuninitialized]|
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             int e;
             printf("pause2");
             scanf("%d",e);
    Je suis étonné qu'il ne parle pas d'une erreur de pointeur, mais il te manque un & sans doute.

    Tu aussi 2 warnings comme celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Users\pgradot\Documents\C\dvpez.c|127|warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]|
    qui sentent le crash assuré.

    De façon plus générale, tu ne devrais pas utiliser scanf() pour les saisies utilisateurs mais plutôt fgets() pour analyser toi même la chaine saisie. Tu devrais aussi voir : http://emmanuel-delahaye.developpez....ees-solides-c/
    et http://xrenault.developpez.com/tutoriels/c/scanf/

    PS :
    je n'ai ni erreur ni warning
    Cela signifie que tu n'utilises pas des options intéressantes de ton compilateur pour lui demander de te signaler le maximum de warnings intéressants. Quel compilateur et éventuellement IDE utilises-tu ?

  3. #3
    Membre actif
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    Salut j'utilise codeblocks et GNU GCC compiler, au début j'avais un problème de compilateur alors j'ai fait reset defaults, peut etre ça vous aiderai à comprendre mon problème de compilateur, enfin que dois-je faire pour régler le problème de mon compilateur? et merci

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Dans project / build options, il y a les options de compilations. Il faut au moins choisir -Wall. -Wextra est un plus. Google sera ton ami pour trouver le manuel de gcc et donc l'ensemble des (très très nombreuses) options possibles et des articles et autres tutoriels sur le sujet.

  5. #5
    Membre actif
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Par défaut
    je ne peux pas choisir build options, elle est écrite en gris!

Discussions similaires

  1. [WD16] WDTST.EXE (lanceur Mode Test) has stopped working
    Par Mordehai dans le forum WinDev
    Réponses: 17
    Dernier message: 24/09/2014, 11h17
  2. Réponses: 0
    Dernier message: 18/01/2012, 18h02
  3. CVCamera (the application has stopped unexpectly)
    Par nizkowsky dans le forum Android
    Réponses: 4
    Dernier message: 16/05/2011, 10h02
  4. [Exchange 2007] Plantage a l'installation ("ExSetupUI.exe has stopped working")
    Par kedare dans le forum Exchange Server
    Réponses: 0
    Dernier message: 21/11/2009, 01h43
  5. "x x x x has stopped working" (avec Msn,. . .)
    Par cortex024 dans le forum Windows Vista
    Réponses: 3
    Dernier message: 18/09/2006, 11h56

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