C 在链表中引用指针

C 在链表中引用指针,c,C,我在tail->next=(list)malloc(sizeof(node))中遇到错误。有人能告诉我为什么吗?这段代码是在一个NPTEL视频中教授的,在那里它运行没有任何错误 执行tail->next=(list)malloc(sizeof(node))时是否有任何问题 #包括 #包括 main(){ int选择,dat; 类型定义结构{ int数据; struct node*next;//指向节点的指针 }节点; typedef节点*列表; 列出头、尾; 头=尾=空; printf(“输入数

我在
tail->next=(list)malloc(sizeof(node))
中遇到错误。有人能告诉我为什么吗?这段代码是在一个NPTEL视频中教授的,在那里它运行没有任何错误

执行
tail->next=(list)malloc(sizeof(node))
时是否有任何问题

#包括
#包括
main(){
int选择,dat;
类型定义结构{
int数据;
struct node*next;//指向节点的指针
}节点;
typedef节点*列表;
列出头、尾;
头=尾=空;
printf(“输入数据?(1/0)\n”);
scanf(“%d”,选择(&C);
如果(选项==1)
{
printf(“提供数据?\n”);
scanf(“%d”和&dat);
tail=(列表)malloc(sizeof(节点));
尾部->数据=dat;
tail->next=NULL;
头=尾;
printf(“输入数据?(1/0)\n”);
scanf(“%d”,选择(&C);
}
while(选项==1){
printf(“提供数据?\n”);
scanf(“%d”和&dat);
tail->next=(list)malloc(sizeof(node));//显示错误
尾部->下一步->数据=dat;
tail->next->next=NULL;
tail=tail->next;
}
尾=头;
while(tail!=NULL){
printf(“%d”,尾部->数据);
tail=tail->next;
}
}

为了使代码能够成功编译,您需要如下声明节点类型

typedef struct Node{
    int data;
    struct Node* next; //pointer to a node
}node;
此附加命名背后的原因是,直到以typedef开头的语句结束时,节点才被视为已声明的。这就是为什么您还需要命名结构,以便能够声明指向其内部自己类型的指针

此外,当您尝试您提到的有问题的行时,tail可能等于NULL:

tail->next=(list)malloc(sizeof(node));//showing error
除非在第一个if语句之前通过scanf将输入的值读入变量选项,否则当第一个while循环开始并尝试访问时(即为了分配分配空间的地址),tail将为NULLtail->next将等同于取消对空地址的引用,然后尝试访问next字段,从而导致段冲突。

您的问题在于:

typedef struct {
    int data;
    struct node* next; // <-- problem
} node;
现在只有一种类型名为
node


您的
main
函数也缺少返回类型。应该是:

int main() {
typedef struct node {
    int data;
    struct node* next;
} node;
int main() {