在全局管理结构中访问struct数组时,linux共享内存错误

时间:2013-08-03 14:00:02

标签: linux caching shared-memory

我已经通过shmget创建了一个linux共享内存,我在第一个内存地址上创建了一个这样的全局管理结构,

 typedef struct{
        mini_kv_key *slots;
        unsigned int slots_mask;
        unsigned int slots_num;
        mini_cache_segment **segments;  
        unsigned int segments_num;
        unsigned int segments_mask;
    } mini_cache_globals;

我尝试使用

mini_cache_globals mini_cache = shmat(0, NULL, 0);

获取此管理结构,但我发现当我使用

mini_cache->slots[index];

获取mini_kv_key将返回段故障,访问

也是如此
mini_cache->segments_num[index];

我很抱歉我的英语很差,代码是here

1 个答案:

答案 0 :(得分:1)

您正在尝试访问仅在其他进程中有效的指针(进程实际创建的结构和设置指针。)保存在共享结构中的任何指针在任何其他进程中都无效。为了实现您的目标,您应该保存需要在共享内存中共享的所有数据,并存储相对偏移而不是指针。