尝试将整数写入C中的共享内存时出现分段错误(核心转储)

问题描述 投票:0回答:1

我正在尝试在进程之间使用共享内存。我只是一步一步地实现这些功能。当我尝试写入内容时,我不断收到Segmentation fault(core dumped)。

int* ms; // Pointer for milliseconds
int* ns; // Pointer for nanoseconds

void checkArgs(int argc, char* argv[]);
void createSharedMem();
void createSharedMem()
{
    int shmid = shmget(KEY, sizeof(int)*128, IPC_CREAT |0666 );
    if(shmid < 0)
        printf("\n Error creating shared memory");
    ms = shmat(shmid, NULL,0);
    ns = shmat(shmid,NULL,0);
    *ms = 0;
    *ns = 0;
}


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

    checkArgs(argc,argv);
    createSharedMem();            

    *ms = 1;
    *ns = 1;

    printf("ms : %d ns : %d", *ms,*ns);

}
c linux operating-system shared-memory systems-programming
1个回答
0
投票

我发现了这个问题。我没有使用#define KEY定义键并在shmget()中使用它,而是使用key_t创建一个键变量。这解决了“无效参数”的问题

这是更新的代码:

void createSharedMem()
{
    key_t key;
    int shmid = shmget(key, 4096, 0666 | IPC_CREAT);
    if(shmid < 0)
        perror("\n Error creating shared memory");
    ms = shmat(shmid, NULL,0);
    ns = shmat(shmid,NULL,0);
    *ms =0
    *ns=0;
    printf("%d",*ms);
}
© www.soinside.com 2019 - 2024. All rights reserved.