【问题标题】:linux shared memory fault when access an struct array in the global management struct访问全局管理结构中的结构数组时linux共享内存错误
【发布时间】:2013-08-03 14:00:01
【问题描述】:

我已经通过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

【问题讨论】:

  • 使用gcc -Wall -g 编译并使用gdb(可能还有valgrind)进行调试。
  • 另外,测试shmat的结果。失败时(当其结果为(void*)-1L 时)使用perrorstrerror 显示errno

标签: linux caching shared-memory


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2013-01-11
    • 2015-05-22
    • 2016-11-07
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多