c-为什么我的链接列表中有分段错误



在我输入第一个数字后,它显示分段错误,我不知道为什么。我的目标是制作一个链接列表,其中我有一个根是某个数字,并输入更多的数字,这些数字最终将添加到链接列表的一部分。例如,根/第一个数字将是50。我会添加一个更大的数字60,它将被添加到lin列表下的另一个节点。这个过程将重复,因为我认为输入的数字会越来越大。

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int num;
struct node* left;
struct node* right;
}
node;
int main(void){
printf("Put in a number:");
int x = 0;
scanf("%i", x);
node* a = malloc(sizeof(node));
a->num = x;
node* temp = a;
int n = 1;
while(n == 1){

printf("Put in another number:");
int y = 0;
scanf("%i", y);
while(n == 1){

if (temp->num < y){
if (temp->right == NULL){
node* a = malloc(sizeof(node));
temp->right = a;
temp->right->num = y;
break;
}
else{
temp = temp->right;
}
}

printf("Want to stop? Yes(1) or No (1)?");
scanf("%i", n);

}
} 
}

您的问题可能会避免在编译器中启用警告(GCC为-Wall(始终检查警告,即使看起来编译仍在进行(-W error可以避免这种情况(。

通过调用scanf (),您对您的程序说:"从stdin读取输入,如果它与我定义的格式说明符匹配,则将其存储到特定地址">

所以基本上,它期望你传递给它的每个格式说明符都有一个地址

scanf("%i", x);

您正在传递x,这不是一个地址,因此scanf尝试在那里写入,导致分段错误,因为它可能是一个无效地址,不属于操作系统分配给进程的

相反,您需要使用一元运算符&:将x的地址传递给

scanf("%i", &x);

(当您为yn变量调用scanf时,同样的错误重复出现(

scanf 调用的参数

scanf("%i", x);
scanf("%i", y);
scanf("%i", n);

不正确。您必须通过引用传递变量

scanf("%i", &x);
scanf("%i", &y);
scanf("%i", &n);

此while loop

while(n == 1){

if (temp->num < y){
if (temp->right == NULL){
node* a = malloc(sizeof(node));
temp->right = a;
temp->right->num = y;
break;
}
else{
temp = temp->right;
}
}
printf("Want to stop? Yes(1) or No (1)?");
scanf("%i", n);
}

可以调用未定义的行为,因为对于新分配的节点

if (temp->right == NULL){
node* a = malloc(sizeof(node));
temp->right = a;
temp->right->num = y;
break;
}

您没有将其数据成员right设置为NULL。所以它具有不确定的价值。因此,如果语句

if (temp->right == NULL){

在该声明之后

temp = temp->right;

将该不确定值与CCD_ 14进行比较。

在输出的字符串中似乎有一个拼写错误

printf("Want to stop? Yes(1) or No (1)?");
^^^^       ^^^

相关内容

  • 没有找到相关文章

最新更新