取消引用指针错误

时间:2018-04-20 09:45:28

标签: c pointers data-structures dereference

我在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),编译器告诉我:

  

取消引用指向不完整类型的指针' struct Queue_node'。

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

3 个答案:

答案 0 :(得分:2)

您的代码中存在一些问题,首先在执行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()结果。请参阅此帖子Do I cast the result of malloc?

答案 1 :(得分:1)

typedef struct Queue_Node{

int value;
struct Queue_Node* next;

}Queue_Node;

{{1}}

会这样做。

答案 2 :(得分:0)

虽然现有答案已经告诉您错过了typedef的名称,但您有一个更简单的问题:

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

基本错误是一个简单的拼写错误!

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

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

像这样更改您的类型定义

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

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

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