You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现队列数据结构时遇解引用指针错误求助

搞定你的队列代码编译错误!

嘿,我一眼就看到你代码里的几个问题,正是它们导致了编译器报的"dereferencing pointer to incomplete type"错误,给你一步步理清楚:

1. 结构体大小写拼写搞混了!

你定义结构体的时候用的是struct Queue_node(注意是小写的n),但结构体内部的next指针却写成了struct Queue_Node* next;(大写的N)——C语言可是大小写敏感的,编译器根本认不出struct Queue_Node这个类型,自然不让你解引用指针啦。

另外你的typedef写法也不对,正确的姿势应该是给结构体起个别名,这样后面写代码更方便:

typedef struct Queue_node {
    int value;
    struct Queue_node* next; // 这里统一成小写n的结构体名
} QueueNode;

之后你就可以直接用QueueNode代替struct Queue_node,不用每次都写长长的结构体名。

2. malloc分配的内存大小错了!

你写的malloc(sizeof(struct Queue_node*))是在分配指针的大小(一般是4或8字节),但你需要的是整个队列节点结构体的大小啊!应该改成malloc(sizeof(struct Queue_node))(如果用了typedef就是malloc(sizeof(QueueNode)))。要是内存分配不够,后面访问temp->value或者temp->next会直接踩内存,搞不好程序就崩了。

3. 变量名可以更清晰点(可选优化)

你用R当队尾指针,建议改成rear,这样别人看代码或者你自己回头维护的时候,一眼就知道这是啥,不用猜半天。

修复好的完整代码

#include <stdio.h>
#include <stdlib.h>

// 修正后的结构体定义
typedef struct Queue_node {
    int value;
    struct Queue_node* next;
} QueueNode;

QueueNode* front = NULL;
QueueNode* rear = NULL; // 把R改成rear,可读性拉满

void Enqueue(int x) {
    // 分配正确大小的内存,并且检查malloc是否成功
    QueueNode* temp = (QueueNode*)malloc(sizeof(QueueNode));
    if (temp == NULL) {
        printf("内存分配失败,入队失败!\n");
        return;
    }
    temp->value = x;
    temp->next = NULL;

    if (front == NULL && rear == NULL) {
        front = temp;
        rear = temp;
        return;
    }

    rear->next = temp;
    rear = temp;
}

额外提醒

  • 永远要检查malloc的返回值!要是内存不够,malloc会返回NULL,直接用这个空指针的话程序肯定崩。
  • 后面写Dequeue函数的时候,记得把出队的节点内存释放掉,不然会造成内存泄漏哦。

内容的提问来源于stack exchange,提问作者Erik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:20:46