【发布时间】:2011-06-28 15:21:16
【问题描述】:
下面是我的队列的实现,它具有从队列中入队和出队的功能。由于某种原因,它在没有任何线索的情况下崩溃(它在哪里崩溃),因为代码在 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;
}
【问题讨论】:
-
dequeue_phone 和 enqueue_phone 从不同的线程调用,同步使用 qLast,如果小于 1,则不会出队。我怀疑问题出在 dequeue_phone 上。如果有人发现此代码有问题,请告诉我。
标签: c queue linked-list android-ndk