我的进程正在访问已创建的共享内存。附加到共享内存的指针是一个包含指针和2或3个变量的结构。
例如:
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
答案 0 :(得分:5)
如果在多个进程之间共享一个内存段,则无法保证它将映射到同一地址,因此您无法将指针存储在共享内存段中。尽量避免使用指针,使用偏移量或数组(如果可能的话)。
答案 1 :(得分:1)
shmat(2)是一个系统调用(在Linux上)。它可能会失败。至少代码
details_t* details = shmat(shmid,(void*)0,0);
if (!details) { perror("shmat"); exit(EXIT_FAILURE); };
并且您不能(轻松)将指针放在共享内存中,因为该地址特定于每个进程。