使用共享内存中的结构的段错误

时间:2013-03-24 22:19:26

标签: c shared-memory

我提前为我的无知道歉,这给我带来了比应有的更多麻烦,但是我一直在敲我的脑袋几个小时试图想出我做错了什么。我想编写一个具有共享内存存储结构的应用程序。由于某种原因,我无法开始,我一直在访问我的结构成员时遇到了一个seg错误。

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>

#define MAX_SEQUENCE 10

struct shared_data
{
    long sequence[10];
    int sequence_size;
};
typedef struct shared_data shared_data;

int main(int argc, char * argv[])
{ 
    int segment_id;

    shared_data * shared_memory;

    segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR | S_IWUSR);

    shared_memory = (shared_data *) shmat(segment_id, NULL, 0);

    shared_memory->sequence_size = atoi(argv[1]);

    printf("\n\nSequence Size: %d\n\n",shared_memory->sequence_size);

    shmdt(shared_memory);
}

更新:感谢大家,我的系统管理员正在运行诊断并以某种方式禁用共享内存。

1 个答案:

答案 0 :(得分:3)

您的代码对我来说并不坏。唯一明显缺少的是检查传递的参数数量,如:

if (argc != 2)
  return 1;

你是否可能错过了用争论来打电话给你的程序。在这种情况下,它将是

atoi (argv[1]) 

导致你的段错误。

BTW:另外检查shmgetshmat的返回值也可能是一个好主意。