gpt4 book ai didi

c - 队列字母无效

转载 作者:行者123 更新时间:2023-11-30 20:57:26 25 4
gpt4 key购买 nike

目前我很困惑,因为我不确定我是否正确理解了我的任务。我的理解是,我必须创建队列,每个队列都有一个包含一定数量消息的列表。我错了吗?当我感觉自己正在陷入一无所有的时候。我是否对队列有什么误解?我应该创建一个队列吗?我到底应该做什么?

/* Restores a queue previously stored by persistQ() back to memory as identified by its filename.
The queue identifier is automatically taken from the filename.
Returns an error if the filename does not exist or the queue id has been already taken. */
//restoreQ(){}


int main(){
char choice, *msg, *q;

printf("\n1 - Create a queue");
printf("\n2 - List queues");
printf("\n3 - Delete a queue");
printf("\n4 - Send a message");
printf("\n5 - Receive a message");
printf("\n6 - Purge queue/s (If not specified, all queues will be cleared)");
printf("\n7 - Persist a queue");
printf("\n8 - Restore a queue");

//createQ();

while(1){
printf("\nEnter choice: ");
scanf(" %c", &choice);
switch(choice){
case '1':
printf("Enter queue name");
createQ(msg_queue_t -> qName);
case '4':
printf("Enter queue name:");
scanf("%s", &q);
printf("Enter message:");
scanf("%s", &msg);
sendMessage(q, msg);
break;
default:
printf("Incorrrect, Re-try");
break;
}
}

return 0;
}

最佳答案

不,您已经了解队列是什么了。它告诉您 MsgQs_t 包含多个消息队列,每个消息队列包含一个队列和一个标识符 (ID)。代码的结构看起来像这样

#define MSG_BUF_LEN (some_size)

/* number of message queues */
#define MSGQS_LEN (some_size)

/* number of nodes in the message queue */
#define NMESSAGES (some_size)

typedef struct _node {

int8_t message[MSG_BUF_LEN];

struct _node *next;

} node_t;

typedef struct {

int32_t id;

node_t *first_message;

node_t *last_message;

} msg_queue_t;


typedef struct {

msg_queue_t **queues;

}MsgQs_t;



/* Returns a pointer to MsgQs_t structure and through which multiple message queues can be subsequently created.
Each individual message queue is to be identified by a unique identifier. */
MsgQs_t * init_msgq(){

MsgQs_t *msg_queues;

msg_queues = malloc(sizeof(MsgQs_t));

if(msg_queues < 0)
exit(EXIT_FAILURE);

return(msg_queues);
}

您仍然需要实现其他函数来帮助您初始化消息队列以及将消息添加到特定的消息队列中 - 您必须将标识符和消息作为参数传递。

================================================== ===========================

仔细检查您的代码,发现存在重大问题,我建议您了解 C 中的内存分配以及指针的工作原理。

/* Relinquishes all resources currently held by a MsgQs_t.
The pointer to the MsgQs_t in question is set to NULL. */
MsgQs_t * unloadMsgQs(){
MsgQs_t *msg_queues;
msg_queues = NULL;

return(msg_queues);
}

仅仅将指针设置为NULL不会释放内存。你所拥有的这称为内存泄漏,因为malloc仍然占用该内存块,但你已经丢失了对它的引用。另外,您必须释放函数 init_msgqs 返回的地址的内存,并且不要忘记您还必须释放其成员的内存,因为它不会递归地执行此操作本身

struct _node* newNode(const char *m){
struct _node* temp = (struct _node*)malloc(sizeof(struct _node*));
temp -> message = m;
temp -> next = NULL;
return temp;
}

sizeof(struct _node*) 将返回指针的大小,而不是结构本身的大小。请了解 sizeof(struct _node)sizeof(struct _node*) 之间的区别,因为它很重要。

其余代码将无法正常工作。由于这不是代码审查社区,因此我将在此停止并建议您在继续之前熟悉指针及其工作原理。

关于c - 队列字母无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336281/

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