Mémoire partagée en C

Mon processus accède à une mémoire partagée déjà créée. Le pointeur attaché à la mémoire partagée est une structure contenant un pointeur et 2 ou 3 variables.

par exemple:

typedef struct _info_t{ int id; char c; }info_t; typedef struct _details_t{ int buff_id; info_t* info; }details_t; details_t* details = shmat(shmid,(void*)0,0); printf("\n %d \n",details->info->id); // gives me a segmentation fault 

Si un segment de mémoire est partagé entre plusieurs processus, rien ne garantit qu’il sera mappé à la même adresse. Vous ne pouvez donc pas stocker de pointeurs dans un segment de mémoire partagée. Essayez d’éviter d’utiliser des pointeurs, utilisez des décalages ou des tableaux (si possible).

shmat (2) est un appel système (sous Linux). Cela peut échouer. Donc au moins le code

 details_t* details = shmat(shmid,(void*)0,0); if (!details) { perror("shmat"); exit(EXIT_FAILURE); }; 

et vous ne pouvez pas mettre (facilement) des pointeurs dans la mémoire partagée, car l’adresse est spécifique à chaque processus.