no save
Assistance
Achat
News

Forum | programmation
[C - struct] return d'une structure
Charley, le mar. 26 déc. 2006 à 12:16:32
Bonjour,
Je recois lors du test de mon programme une erreur du type "segmentation fault" et je n'arrive absolument pas à voir d'où elle sort, toute aide sera appréciable.
Ce programme contient deux structures dont une inclue l'autre, l'idée est de réaliser un annuaire, on demande le nom, prénom et numéro de plusieurs personnes, que l'on stock dans la structure Personne. On prend ensuite 20 personnes de cette structure pour les mettre dans un carnet. Le carnet contient un second champ qui est le nombre de personnes présentes dans le carnet correspondant, autrement dit 20 si on avait bien 20 personnes dans la structure Personne.

Voici le programme:

#include <stdio.h>
struct Personne {
char nom[32];
char prenom[32];
char numero[13];
};

struct Carnet {
struct Personne pc[20];
int nb_de_personnes;
};

struct Personne nouv_personne(char *nom,char *prenom,char *numero){
struct Personne p;
strcpy(p.nom,nom);
strcpy(p.prenom,prenom);
strcpy(p.numero,numero);
return (p);
}

struct Carnet ajout_ds_carnet(int i, char *nom, char *prenom, char *numero){
struct Carnet c;
strcpy(c.pc[i].nom,nom);
strcpy(c.pc[i].prenom,prenom);
strcpy(c.pc[i].numero,numero);
c.nb_de_personnes++;
return (c);
}
main(){
int i,j=0;
for (i=0; i<5; i++){ //On demande d'entrer seulement 5 personnes
if (i==20) { i=0; j++; }

struct Personne p[i];
char nom[32],prenom[32],numero[13];
printf("Entrez le nom du %d:",i); scanf("%s",nom);
printf("Entrez le prenom du %d:",i); scanf("%s",prenom);
printf("Entrez le numero du %d:",i); scanf("%s",numero);
p[i] = (*nouv_personne)(nom, prenom, numero);
printf("(%s, %s, %s) a été ajouté à la structure Personne\n",p[i].nom,p[i].prenom,p[i].numero);

struct Carnet c[j]; /* Le problème se situe à partir de cette ligne */
c[j] = (*ajout_ds_carnet)(i, p[i].nom, p[i].prenom, p[i].numero);

printf("\nCarnet n°%d, ligne n°%d contient: ((%s,%s,%s),%d)",j,i+1,c[j].pc[i].nom,c[j].pc[i].prenom,c[j].pc[i].numero,c[j].nb_de_personnes);
}


Voilà, je l'ai édité sur Dev C++, sous Windows, le compilateur ne me retourne pas d'erreur, il m'exécute le programme jusqu'à la ligne de l'appel de la fonction ajout_ds_carnet() où une fenêtre apparaît avec le message : An access violation (Segmentation fault) raised in your program

Merci de votre attention, en espérant avoir une réponse rapidement, je vous remercie. Configuration: Windows XP
Firefox 2.0.0.1


kij_82
déc. 06
Suivant
REPONSES
kij_82
déc. 06
BugMaker
déc. 06
Charley
déc. 06
kij_82
déc. 06
Charley
déc. 06
Version Web
Réalisé par RedShift
no save