gpt4 book ai didi

c - 整数在 msgrcv 之后被设置为随机值

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:51 25 4
gpt4 key购买 nike

我在队列中有许多消息(它们是整数)我想要消费,我想使用整数 int consumed 来跟踪我消费了多少消息。

我首先使用 ds.msg_qnum > 0 检测队列是否有消息,其中 ds 是 struct msqid_ds 的一个对象。如果有消息,我会调用 msgrcv 来使用消息并增加使用的计数器。

所以我有这个:

msgrcv(msgqid, (void *) &message, sizeof(message), 1, 0)
printf("consumed before incr: %d\n", consumed);
consumed++;

在每次消息消费后,consumed 显示为相同的随机整数值。此外,我将消息结构设置为将消息数据保存为 int 类型;我不确定那是否是确凿的证据。

最佳答案

您调用 msgrcv是无效的。尺寸参数错误:

struct mymsg {
long mtype; /* Message type. */
char mtext[1]; /* Message text. */
}

[...] The argument msgsz specifies the size in bytes of mtext.

您应该传递 msgbuf.mdata 的大小,而不是整个结构的大小。这很可能会覆盖 message 的末尾,并混淆存储在那里的任何内容。

(确保在调用 msgrcv 之前初始化 message.mtype。)

关于c - 整数在 msgrcv 之后被设置为随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10647909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com