我正在尝试创建一个简单的单链列表。以前,我成功完成了此操作,没有任何错误,但是现在遇到一个错误。我怀疑由于第23行中的if
语句,内存分配存在某种问题。
我尝试过的事情:
我在所有声明中都使用了类型转换,即使在C语言中没有必要。
我删除了if
语句,但仍然遇到错误。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int value;
struct Product *next;
} Product;
int main()
{
int user_choice;
Product *head;
head = malloc(sizeof(Product));
head->next = NULL;
head->value = 5;
printf("\n Do you want to add a new node (0 for no, 1 for yes)? \n");
scanf("%d", &user_choice);
if (user_choice == 1) // line 23
{
head->next = malloc(sizeof(Product));
if (!head->next)
printf("\n Memory allocation failed! \n");
head->next->next = NULL; // 1st error
printf("\n Enter a value: \n");
int value;
scanf("%d", &value);
head->next->value = value; // 2nd error
}
free(head);
free(head->next);
}
答案 0 :(得分:6)
typedef struct
{
} Product;
为未命名结构声明一个名为Product
的类型别名-但是,您的前向声明struct Product *next;
需要一个 named 结构,否则,编译器无法确定它属于哪个定义。
最简单的解决方案是为结构命名:
typedef struct Product
{
int value;
struct Product *next;
} Product;