修改共享内存中的结构

问题描述

我正在尝试在共享内存中创建基于指针的队列

这是我的入队功能

void enqueue(queue *q,int k) {   
    _queueNode *temp = mmap(NULL,sizeof(_queueNode),PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS,-1,0);
    temp->key = k;
    temp->next = NULL;  
    
    if (q->rear == NULL) { 
        q->front = q->rear = temp;
    }
    else {
        q->rear->next = temp; 
        q->rear = temp;
    }

    q->length++;
}

_queueNode结构

typedef struct queueNode { 
    int key; 
    struct queueNode *next; 
} _queueNode; 

入队在父进程中一切正常,但是当我入队在子进程中时只能对它起作用,并且当我在父进程中读取更改时遇到分段错误。 我的主要是这样

queue *q = newqueue();
enqueue(q,1);
enqueue(q,2);
enqueue(q,3);

if (fork() == 0) {
    enqueue(q,4);
    printf("child: ");
}
else {
    wait(NULL);
    printf("parent: ");
}
printqueue(q);

我正在得到这个输出

child: [4,3,2,1]
Segmentation fault (core dumped)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...