队列中的enque函数(使用链接的数据结构)通常与malloc()函数一起使用。但是,我试图通过避免使用malloc()如下来实现它。
我将两次打印后面板的值。
第一次打印正确的值,但是第二次给出垃圾值。
void enque(queue* qp, int x) // queue is a struct that holds front and rear node address
{
queueNode a; // queueNode is a struct with data and next pointer
a.data = x;
a.next = NULL;
if(isEmpty(qp))
{
qp->front = &a;
qp->rear = &a;
}
else
{
qp->rear->next = &a;
qp->rear = qp->rear->next;
}
}
主要功能
int main()
{
queue q;
int c;
initialize(&q);
enque(&q, 11);
printf("\n %d",(&q)->front->data);
printf("\n %d",(&q)->front->data);
return 0;
}
输出如下:
11
一些垃圾价值
为什么第二次打印垃圾值而不是11?
最佳答案
您的程序具有UB。此方法无效。如果不想使用malloc,则需要有一个全局节点池。
关于c - 如何在不使用内置malloc函数的情况下实现入队功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55736068/