取消引用指针错误
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,但在整个代码中使用相同的编写方式很重要。
我正在用 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,但在整个代码中使用相同的编写方式很重要。