我在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
声明,为什么?
答案 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,但在整个代码中使用相同的方式编写它是很重要的。