队列中的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/

10-16 04:54