Problème dans mon code

Signaler
Messages postés
13
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 août 2006
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Bonjour à tous,



lors de la compilation, mon programme s'arrête à la ligne coura->temps_UC=tps

pour être plus précise, la fonction calcul_temps_UC est appelée par une autre fonction. Pour l'appeler, j'entre la ligne

calcul_temps_UC(&a);

Je ne trouve pas la solution à ce problème. Si quelqu'un peut me donner un coup de pouce ce me serait très utile





typedef struct activite* ptr_activite;

typedef struct activite{


int num_process;


char *statut_process;


int temps_UC;


int avant_blocage;


int temps_cumule;


ptr_activite suiv;

}ACTIVITE;





void calcul_temps_UC(ptr_activite a){

int i=0,j=0,tps=0,moyenne=2000,ecart_type=510,nb_process=2;

ptr_activite
coura;


printf("loi\n");


srand(time(NULL));

printf("loup\n");

for(i=0;i<nb_process;i++){ printf("mur\n");


tps=(rand()%(2*ecart_type)+(moyenne-ecart_type));


printf("\nle nbr aléatoire est %d",tps);


coura.temps_UC=tps;


coura=coura->suiv;


}


}

7 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
ptr_activite coura; => tu déclares un pointeur sur une structure ACTIVITE mais tu ne l'initialise pas.
Lors de son utilisation coura->temps_UC=tps, tu accède à une zone quelconque de la mémoire et boom.

A mon avis il manque au début :
ptr_activite coura = a;

de plus c'est :
coura->temps_UC=tps;
Messages postés
13
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 août 2006

non malheureusement ce n'est pas ça, j'avais déjà essayé cette solution.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
En tout cas il y a un problème de pointeur non initialisé au départ ou une liste chaînée mal faite. Il faudrait mettre plus de code ou
donner le but du jeu.
Messages postés
13
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 août 2006

voici le code:



#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>



/*

typedef struct statistique* ptr_statistique;

typedef struct statistique{


int num_process;


int temps_UC;


int blocage_E_S;


int terminaison_UC;


int blocage_UC;


ptr_statistique suiv;


}statistique;*/



typedef struct activite* ptr_activite;

typedef struct activite{


int num_process;


char *statut_process;


int temps_UC;


int avant_blocage;


int temps_cumule;


ptr_activite suiv;

}ACTIVITE;





void calcul_temps_UC(ptr_activite a){

int i=0,j=0,tps=0,moyenne=2000,ecart_type=510,nb_process=2;

ptr_activite coura;

coura=a;



srand(time(NULL));

for(i=0;i<nb_process;i++){


tps=(rand()%(2*ecart_type)+(moyenne-ecart_type));


printf("\nle nbr aléatoire est %d",tps);


coura->temps_UC=tps; il effectue la boucle une fois et se stoppe ici


coura=coura->suiv;


}


}



void activite(ptr_activite
*a){


int nb_process=2,j=0,tps,temps_total=0;

ptr_activite coura,tempa;

for(j=0;j<nb_process;j++){


if(j==0){


(*a)=(ptr_activite)malloc(sizeof(activite));


(*a)->num_process=j;


(*a)->suiv=NULL;


coura=(*a);


printf("%d",(*a)->num_process);


}


else{


tempa=(ptr_activite)malloc(sizeof(activite));


coura->suiv=tempa;


coura=tempa;


coura->suiv=NULL;


printf("%d",coura->num_process);


}


}

coura->suiv=(*a);

printf("OK");

calcul_temps_UC(&a);

}
Messages postés
13
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 août 2006

comme vous pouvez le voir j'ai crée une liste circulaire et pour chaque cellule je veux générer

un nombre aléatoire et le placer dans la variable temps_UC de ma structure
Messages postés
13
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 août 2006

le but du sujet est d'afficher deux fichiers grâce à l'algorithme d'ordonnancement
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Normalement tu doit avoir soit une erreur soit un warning à cette ligne :
calcul_temps_UC(&a);

vu les prototypes c'est plutot :
calcul_temps_UC(*a);