我正在用 C 语言制作消息队列 API,但接收方法有问题。我将 char* 消息(“BOB”)发送到消息队列并成功存储。然后我尝试接收消息,但失败了。
在 mq_receive() 中,正确的消息被出列并且 ret_val->buf 指向 0x012f5754 ("BOB")。接下来,msg_ptr(原来是 0x00000000)被赋值为 0x012f5754。在程序返回 main() 之前,一切都按预期工作。在 main() 中,receive_message 仍然为 NULL。我期待它指向 BOB 的第一个字符,即 0x012f5754。我究竟做错了什么?谢谢。
//main.c
main(){
char* receive_message = NULL;
//message queue init ...
mq_send(msq_id, "BOB"); //this works correctly
mq_receive(msq_id, receive_message);
printf("return value: %p\n", receive_message);
}
//message_queue.c
mqd_t mq_receive(mqd_t mqdes, char *msg_ptr)
{
queue_t* ret_val;
q_attr* attr_ptr = (q_attr*)mqdes;
ret_val = dequeue(attr_ptr);
//all this works ret_val->buf points to BOB
msg_ptr = ret_val->buf;
return mqdes;
}