链表输入一次之后打印然后在追加输入打印会崩是为啥啊

img


崩溃处代码如下
void ShowEmployee(struct info* s)
{
struct info* p, * q;

for (int i = 0; i < g_count ; i++)
{
    p = s->next;
    q = s;
    for (int j = 0; j < g_count - 1 - i; j++)
    {
        if (strcmp((p->name), (p->next->name)) > 0)
        {
            q->next = p->next; 
            p->next = p->next->next;
            q->next->next = p;
        }
        q = q->next;
        p = q->next;
    }
}
p = s -> next;
for (int i = 0; i < g_count; i++)
{
    Output_one(p);
    p = p->next;
}

}

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在您提供的代码中,崩溃可能发生在以下几个地方:

1、 在执行排序操作时,可能存在无效的指针访问。特别是在交换节点位置时,需要确保相关的指针关系正确且不会导致无效的访问。请确保在执行以下操作之前进行适当的检查:

q->next = p->next; 
p->next = p->next->next;
q->next->next = p;

2、 在打印链表时,可能遇到指针为空的情况。请确保在迭代链表时,正确处理指针为空的情况,以避免访问无效的内存。在您的代码中,可以添加对指针 p 的空检查:

p = s->next;
for (int i = 0; i < g_count; i++)
{
    if (p != NULL) {
        Output_one(p);
        p = p->next;
    }
}

这样,如果指针 p 为空,就不会尝试访问它的成员。

请注意,这些是一些可能导致崩溃的常见问题,但具体的问题可能取决于您的完整代码和上下文。如果问题仍然存在,请提供更完整的代码或更详细的错误信息。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

问题的主要原因是在函数ShowEmployee中,变量g_count并未定义,导致循环条件不正确,可能会导致程序崩溃。 此外,代码中的函数Output_one也未定义,可能会导致编译错误。为了更好地理解问题,我们需要更多的上下文信息。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^