Bonjour à tous !

Voila j'ai un petit souci en utilisant ma memoire partagee dans mon programme...

Voici la fonction qui l'initialise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
byte* SHM_init(mem_t* mem, size_t shm_size){
 
	//Creation SHM
	int i,j;
	if((shmid = shmget((key_t)401 , shm_size , IPC_CREAT|0666)) == -1){
		fprintf(stderr,"SHM_init : Erreur lors de la creation de SHM\n");
		exit(-1);
	}
 
	//Attachement
	byte* shm = (byte*)shmat(shmid , NULL , 0);
	if(shm == (void*)(-1)){
		fprintf(stderr,"SHM_init : Erreur lors de l'attachement\n");
		exit(-1);
	}
 
	//Joueurs
	(*shm) = (byte)mem->nbMaxJ; shm++;
	(*shm) = mem->nbJoueurs; shm++;
	for(i=0 ; i<(ceil((mem->nbMaxJ)/8)) ; i++){
		(*shm) = mem->statutJoueurs[i];
		shm++;
	}
 
	/* ... */
 
	printf("Initialisation SHM terminee\n");
 
	return shm;	
}
Le souci, c'est qu'un printf a la fin de cette fontion sur shm[0] par exemple me retourne 0 et non la valeur qui était dans mem->nbMaxJ.

Ensuite, je me demande si ma fonction va marcher ailleurs , c'est à dire que je retourne un pointeur sur ma memoire partagee, je vais l'utiliser dans mon main, puis j'apellerais une fonction qui le detachera et detruira ma memoire partagee. Est-ce correct ?

VOila merci !!