|
发表于 2023-11-27 00:28:38
|
显示全部楼层
这个警告提示你使用了一个未初始化的指针*q。在你的代码中,*q 在第一次分配内存之前被赋值给了一个未知的地址。在循环链表模拟约瑟夫问题的算法中,你需要在删除节点之前将*q 赋值为 p 的下一个节点。所以,在 while 循环中,你需要在 p 的下一个节点之前将 *q 初始化为 NULL,然后再赋值给 p 的下一个节点。具体的代码如下:
- ++
- Status Josephus(CirLinkList& L) {
- if (!ListEmpty(L)) {
- CirLinkList p = L;
- CirLinkList q = NULL;
- while(L->data != 2) {
- if (p->next == L)
- p = p->next;
- p = p->next->next;
- if (p->next == L)
- p = p->next;
- q = p->next;
- p->next = q->next;
- printf("本轮%d号出局\n",q->data);
- L->data--;
- free(q);
- }
- printf("游戏结束。最后剩余2人:%d,%d\n", L->next->data, L->next->next->data);
- return OK;
- }
- return ERROR;
- }
复制代码
通过上述修改后,警告应该会消失。希望对你有帮助!如果还有其他问题,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |
|