Segmentation fault

hwida12 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
hwida12 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,
En fait je suis entrain de faire quelques programmes en c sous linux (ubuntu)
sa se compile sans erreur mais lors de l'exécution sa me donne le message suivant::
houda@houda-laptop:~/Bureau$ ./sortie
Segmentation fault
Je ne sais pas de quoi il s'agit au juste?

5 réponses

callfinger
 
pense a joindre ton code sinon ça va compliqué de commenté
0
hwida12 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
voici le code:



#include<sys/types.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#include <signal.h>
#include <errno.h>
#define SHM_SIZE 1024

typedef struct
{
int t1[5];
}structure_partagee;

int main(int argc, char *argv[])

{
key_t clef ; // la clef associee au segment
pid_t pid ;
char *mem ;
int shmid ; // l'identificateur du segment de memoire partagee
int t[5]={214,4553,65,90,123};

// J'instancie une structure "structure_partagee" et je l'appelle data.
structure_partagee *data;

char *name = (char *) malloc(15*sizeof(char)) ;
int i;
/* construire
une cle identifiant le segment */
clef = ftok(name,(key_t) clef) ;

/*indiquer
les droits d'acces de ce segment de memoire */

shmid = shmget((key_t)clef, SHM_SIZE,0644|IPC_CREAT ) ;
if ( shmid== -1 )
{
perror("shmget") ;
exit(1) ;
}



pid =fork() ;


if(pid > 0)
{//père



mem = (char*) shmat(shmid,(void*)0, 0);
if (mem ==(char*)-1)
{
perror("shmat") ;
exit(1) ;

}
for(i=0; i<5; i++)
{
(*data).t1[i]=t[i];
}



if(shmdt(mem)==-1)
{
perror("shmdt");
exit(1);
}



}


else if(pid==0)//fils


{
printf("Je suis le fils\n") ;
mem = (char*)shmat(shmid,(void*)0,0) ;
if (mem ==(char*)-1){
perror("attachement impossible") ;
exit(1) ;

}

for(i=0; i<5; i++)
{
printf("%d\n",(*data).t1[i]);
}


//printf("ecrit dans le segment: %s \n",mem);




if(shmdt(mem)==-1)
{
perror("shmdt");
exit(1);
}
return(0);
}
}
0
callfinger
 
j'ai tester ton code chez moi
effectivement on obtient une Erreur de segmentation, ce qui nous amene a la conclusion que tu essaye d'acceder une zone memoire alors que tu en pas le droits. donc petit passage par gdb qui franchement ne me donne aucune information( normal manque de concentration ya bordeaux qui joue) mais j'ai alloué de la memoire pour ta structure et la plus derreur de segmentation mais ya que le fils qui affiche une suite de 0;

login $$:./tester
Je suis le fils
0
0
0
0
0
login $$:

essaye de verifier l'initiatlisation de tes variables et j'essaye de mon cote a la mi temps...
0
hwida12 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
De même moi j'ai fait ceci
structure_partagee data;
au lieu de déclaré ma structure comme étant pointeur , par contre sa me donne tjrs des 0 de la part du fils. Je vais essayer encore et je te dirais où est ce que je suis arrivée.

Merci bcppp pour tes réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hwida12 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Même si j'ai alloué de la mémoire à ma structure , cette fois ci sa donne :
houda@houda-laptop:~/Bureau$ ./out
Réception fils1
0
0
0
0
Réception fils2
0
0
0
0
fork(): Success
0