CでメッセージキューAPIを作成していますが、receiveメソッドに問題があります。char *メッセージ( "BOB")をメッセージキューに送信すると、正常に保存されます。次に、メッセージを受信しようとしますが、失敗します。
mq_receive()内で、正しいメッセージがデキューされ、ret_val-> bufが0x012f5754( "BOB")を指します。次に、msg_ptr(元々は0x00000000)に0x012f5754が割り当てられます。プログラムがmain()に戻るまで、すべてが期待どおりに機能します。main()では、receive_messageはまだNULLです。私はそれが0x012f5754であるBOBの最初の文字を指すことを期待していました。私は何が間違っているのですか?ありがとう。
//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;
}