取消引用指针错误

Dereferencing pointer error

我正在用 c 语言创建一个队列数据结构。

typedef struct Queue_node{

int value;
struct Queue_Node* next;

};

struct Queue_Node* front = NULL;
struct Queue_Node* R = NULL;

void Enqueue(int x) 
{
    struct Queue_node* temp = (struct Queue_node*)malloc(sizeof(struct  Queue_node*));
    temp->value = x;
    temp->next = NULL;

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

    R->next = temp;
    R = temp;
}

在第 24 行 (R->next = temp),编译器告诉我:

dereferencing pointer to incomplete type 'struct Queue_node'.

我无法访问 R->next after 声明,为什么?

struct Queue_node{

int value;
struct Queue_Node* next;

};

typedef struct Queue_Node{

int value;
struct Queue_Node* next;

}Queue_Node;

会做的。

你的代码没有什么问题,首先在做的时候给别名typedef

typedef struct Queue_node{
    int value;
    struct Queue_Node* next;
}Queue_node;/*put alias name here */

其次,malloc()内存分配不正确

 struct Queue_node* temp = (struct Queue_node*)malloc(sizeof(struct  Queue_node*));

应该是(分配等于 Queue_node 大小的内存,而不是 Queue_node*

 struct Queue_node* temp = malloc(sizeof(struct  Queue_node)); 

也避免转换 malloc() 结果。看到这个 post Do I cast the result of malloc?

虽然现有答案已经告诉您您缺少 typedef 的名称,但您的问题要简单得多:

typedef struct Queue_node{
  int value;
  struct Queue_Node* next;
};

基本上错的是一个简单的错字!

你定义一个struct Queue_node。在其中你想使用一个指向 struct Queue_Node 的指针,它不存在。

在 C 结构标记中,类型名称或任何其他标识符区分大小写。

像这样更改类型定义

struct Queue_Node{
  int value;
  struct Queue_Node* next;
};

typedef struct Queue_Node{
  int value;
  struct Queue_Node* next;
} Queue_Node;

您也可以使用 Queue_node,但在整个代码中使用相同的编写方式很重要。