C 使用共享内存中的结构进行Seg故障

C 使用共享内存中的结构进行Seg故障,c,shared-memory,C,Shared Memory,我为我的无知提前道歉,这给我带来的麻烦比它应该给我的麻烦多得多,但我已经在我的办公桌上敲了几个小时的脑袋,试图找出我做错了什么。我想编写一个具有存储结构的共享内存的应用程序。由于某些原因,我无法启动,访问结构的成员时不断出现seg故障 #include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> #define MAX_SEQUENCE 10 struct shared_data { l

我为我的无知提前道歉,这给我带来的麻烦比它应该给我的麻烦多得多,但我已经在我的办公桌上敲了几个小时的脑袋,试图找出我做错了什么。我想编写一个具有存储结构的共享内存的应用程序。由于某些原因,我无法启动,访问结构的成员时不断出现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);
}
#包括
#包括
#包括
#定义最大值序列10
结构共享数据
{
长序列[10];
int序列的大小;
};
typedef结构共享_数据共享_数据;
int main(int argc,char*argv[])
{ 
int段_id;
共享数据*共享内存;
段id=shmget(IPC_私有、sizeof(共享数据)、S_IRUSR|S_IWUSR);
共享内存=(共享数据*)shmat(段id,NULL,0);
共享内存->序列大小=atoi(argv[1]);
printf(“\n\n序列大小:%d\n\n”,共享内存->序列大小);
shmdt(共享内存);
}

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

我觉得您的代码不错。唯一明显缺少的是对传递的参数数量的某种检查,如:

if (argc != 2)
  return 1;
您是否可能只是错过了用参数调用程序。在这种情况下,它将是

atoi (argv[1]) 
那是你的错


顺便说一句:另外检查
shmget
shmat
的返回值也可能是个好主意。

我刚刚尝试了你发布的代码,它编译并运行了fineAh,很好,当我运行代码时,我刚刚传递了一个参数,假设OP也在这样做。虽然我在第一次尝试时错过了:)因为OP可能也错过了。请记住,atoi()已被弃用。请看一下strtol()。