.exe has stopped working

Fermé
rosy01 Messages postés 39 Date d'inscription dimanche 10 novembre 2013 Statut Membre Dernière intervention 21 juin 2014 - 19 nov. 2013 à 16:56
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 nov. 2013 à 21:06
Salut, je vien d'écrire un simulateur de gestionnaire de processus et voila le code:

#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
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
19 nov. 2013 à 17:10
Bonjour,

J'ai parcouru très rapidement :
char repE='o';
scanf("%d",e); => Il faut mettre &e
scanf("%s",repE); => repE est de type char... Si tu veux un caractère, il faut mettre scanf("%c",&repE); si tu veux une chaîne, il faut mettre char repE[TAILLE];

Ces deux erreurs doivent remonter en warning. Si tu n'as pas de warning, c'est que ton compilateur est mal configuré (il faut baisser activer le flag -Wall).

Cdlt,
0
rosy01 Messages postés 39 Date d'inscription dimanche 10 novembre 2013 Statut Membre Dernière intervention 21 juin 2014
Modifié par rosy01 le 19/11/2013 à 18:18
Pouvez vous me détailler comment configurer le compilateur?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
19 nov. 2013 à 21:06
Quel est-il ?
0