我正试图在C中的LinkedList上创建一个Queue。并且我有一个问题,当我尝试初始化队列并返回QueueNode=NULL时;它仍然会给我一个内存地址,当尝试检查Queue是否为空时,结果总是不是。如果我让队列指针在main中为NULL,那就是工作(指针等于NULL(。附上我的代码。
QueueNode标头:
typedef struct node
{
queueInfo value;
struct node* next;
}QueueNode;
QueueNode* createQueue();
int isEmptyQueue(QueueNode* Q);
void insert(QueueNode** Q, queueInfo x);
void delafter(QueueNode* p, queueInfo* x);
void PrintQueue(QueueNode* Q);
QueueNode.c
#include <stdio.h>
#include <stdlib.h>
QueueNode* createQueue()
{
/*
Aim: Initiolaze new Queue;
input: nothing
outpot: returns QueueNode pointer
*/
QueueNode* Q = NULL;
Q->next = NULL;
return Q;
}
int isEmptyQueue(QueueNode* Q)
{
/*
Aim: check if the Queue is empty
input: pointer to an queue
outpot: returns 1 if the queue is empty, 0 if not
*/
if ((!Q))
{
return 1;
}
return 0;
}
main:
{
QueueNode* q = createQueue;
int res = isEmptyQueue(q);
printf("%dn", res);
return 0;
}
来自调试模式的图片在此处输入图像描述
至少这些问题:
分配.next
的尝试不正确
我正试图在C中的LinkedList上创建一个队列。当我试图初始化队列并返回
QueueNode = NULL;
时,我遇到了一个问题
将NULL
分配给Q
是可以的,但Q->next = NULL;
是未定义的行为(UB(,因为Q
没有指向太有效的内存。不要尝试Q->next = NULL
,因为它不是必需的。
QueueNode* Q = NULL;
// Q->next = NULL;
return Q;
警告未全部启用
CCD_ 8尝试将函数的地址分配给CCD_ 9指针。相反,调用函数。启用了良好警告的编译器会对此发出警告。
// QueueNode* q = createQueue;
QueueNode* q = createQueue();