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() {