c - 如何在不使用内置malloc函数的情况下实现enque函数?

标签 c queue

队列中的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函数的情况下实现enque函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736068/

相关文章:

c - 什么是易于破解的 C 预处理器?

c# - BrokeredMessage 调用 OnMessage() 后自动释放

.NET 快速持久队列

python - 线程队列在 Python 中挂起

c - C 如何处理补码架构中的数字 0?

c - 混合 C 和汇编及其对寄存器的影响

c - 打印数组时出现段错误

queue - 以用户为中心的工作流程的 Airflow DAG 设计

c# - 反转队列

组合常量后缀和可移植数据类型