Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/03/2017, à 21:59

lekafre

Segmentation fault lors de l'exécution d'un programme qui compile

Bonsoir,
Je vous présente un problème qui me résiste depuis plusieurs heures..
J'ai commencé  à code une application dans l'optique de gérer mes séances de cours ( je suis jeune enseignant ). J'aime avoir des applications qui répondent exactement à mes besoins.
Dans ce programme, j'ai créé deux structures (OG : objectif général et OI : objectif intermédiaire ) qui contiennent chacun un identifiant, un intitulé, une durée, etc.
Afin d'automatiser l'alimentation de ces structures, j'ai crée deux fonctions ( fill_struct_OG et fill_struct_OI) qui permettent d'ajouter des données dans les structures.

Lors de la compilation je n'ai pas de message d'erreur, mais lors de l'exécution j'obtiens "Erreur de segmentation (core dumped)"
Voici l'intégralité du fichier source

/*******************************************************************
** Entetes
*******************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*******************************************************************
** Déclaration des structures
*******************************************************************/
typedef struct {
	char 	*Id;
	int 	Duree;
	char 	*Intitule;
	int 	NbreOI;
	int 	IndiceOI[2];
}OBJECTIFG;
	
typedef struct{
	char 	*Id;
	int  	Duree;
	char 	*Intitule;
	int 	NbreTaches;
	int 	IndiceTaches[10];
}OBJECTIFI;

/*******************************************************************
** Prototypes
*******************************************************************/
static void fill_struct_OG( OBJECTIFG *,const char *,int,const char *, int);
static void fill_struct_OI( OBJECTIFI *, const char *, int, const char *, int);

/*******************************************************************
** Variables globales
*******************************************************************/
OBJECTIFG *OG;
OBJECTIFI *OI;

/*******************************************************************************
**  Programme principal
*******************************************************************************/
int main(int argc, 
	char **argv){
	int i;
	int dim=2;

	OG=(OBJECTIFG*)malloc(dim*sizeof(OBJECTIFG));
	fill_struct_OG(&OG[0],"OG00" , 2 , "S'installer et préparer ses affaires", 0 ); 
	fill_struct_OG(&OG[1],"OG01" , 2 , "S'installer et préparer ses affaires", 0 ); 
	OI=(OBJECTIFI*)malloc(dim*sizeof(OBJECTIFI));
	fill_struct_OI(&OI[0],"OI00",2,"S'installer et préparer ses affaires",0);
	fill_struct_OI(&OI[1],"OI00",2,"S'installer et préparer ses affaires",0);

}

/*******************************************************************
** Définitions des sous-fonctions
*******************************************************************/
static void fill_struct_OG( OBJECTIFG *obj , const char *Id , int Duree , const char *Intitule, int NbreOI){
strcpy(obj->Id, Id);
strcpy(obj->Intitule, Intitule);
obj->Duree = Duree ;
obj->NbreOI = NbreOI;
obj->IndiceOI[0] = 1;
obj->IndiceOI[1] = 2;
return;
}

static void fill_struct_OI(OBJECTIFI *obj , const char *Id , int Duree , const char *Intitule, int Nbre){
strcpy(obj->Id, Id);
strcpy(obj->Intitule, Intitule);
obj->Duree = Duree ;
obj->NbreTaches = Nbre;
return;
}

Je compte sur votre expertise pour m'aider.. Qu'est ce que j'ai mal  fait ? Comment puis-je corriger cette erreur ?

Hors ligne

#2 Le 01/03/2017, à 22:39

grigouille

Re : Segmentation fault lors de l'exécution d'un programme qui compile

strcpy(obj->Id, Id);

fait plutôt

obj->Id = strdup(Id);

et plus loin

free(obj->Id);

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#3 Le 02/03/2017, à 01:01

lekafre

Re : Segmentation fault lors de l'exécution d'un programme qui compile

Bonsoir grigouille et merci pour cette réponse rapide. Il semble que cela fonctionne.

Hors ligne