gpt4 book ai didi

c - C中链表的队列实现

转载 作者:行者123 更新时间:2023-12-01 13:02:40 24 4
gpt4 key购买 nike

下面是我的队列的实现,它具有从队列中入队和出队的功能。由于某种原因,它在没有任何线索的情况下崩溃(崩溃的地方),因为代码在 android 上运行。我怀疑我的队列代码。如果你们有任何线索,我的代码有什么问题,请给我一个想法。

感谢您的帮助。

这是我的 C 代码:

    int qLast = 0;

typedef struct phoneSt PhoneStructure;

typedef struct{
PhoneStructure Phone;
struct phoneQ *next;
}phoneQ;


phoneQ *headElement = NULL; /* front pointer in queue*/
phoneQ *tailElement = NULL; /* rear pointer in queue */

void enqueue_Phone(PhoneStructure Frame)
{
phoneQ *newnode; /* New node to be inserted */
newnode=(phoneQ*)av_malloc(sizeof(phoneQ));
newnode->next=NULL;
newnode->Phone=Frame;
qLast++;
if(headElement==NULL && tailElement==NULL)
{
headElement=newnode;
tailElement=newnode;
}
else
{
tailElement->next=newnode;
tailElement=newnode;
}
__android_log_print(ANDROID_LOG_DEBUG, "myphone.c", "Queue is having %d element", qLast);
}

PhoneStructure dequeue_Phone()
{
phoneQ *delnode; /* Node to be deleted */
PhoneStructure Frame;
__android_log_write(ANDROID_LOG_DEBUG, "myplayer.c", "In dequeue_Phone");
if(headElement==NULL && tailElement==NULL){
__android_log_write(ANDROID_LOG_ERROR, "myphone.c", "Queue is empty to delete any element");
}
else
{
__android_log_write(ANDROID_LOG_DEBUG, "myphone.c", "In dequeue queue is not empty");
delnode=headElement;
headElement=headElement->next;
Frame = delnode->Phone;
av_free(delnode);
qLast--;
}
__android_log_print(ANDROID_LOG_DEBUG, "myphone.c", "In dequeue_Phone returning remaining %d",qLast);
return Frame;
}

最佳答案

当您清空队列时,您不会将 tailElement 设置为 NULL。下次入队时,headElement 将保持为 null,并且您将访问已删除的 tailElement,这可能会崩溃。否则,当您出队时,您会访问 headElement->next,这崩溃。

...
headElement=headElement->next;
if (!headElement)
tailElement=NULL;
Frame = delnode->Phone;
...

关于c - C中链表的队列实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021582/

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