我目前正在开发一个读取数字并将其添加到链接列表的程序。
我遇到的问题是指向我的struct的指针永远不会为null,因此我不能使用if-conditions而不会遇到某种错误(SIGSEGV)。
在main方法中,我创建了一个结构节点指针,名为" head":
struct node* head;
在函数push中,我会检查head是否为null - 如果是,则表示它未初始化。我用正常的if条件检查了这个:
if(head == null){
//Code
}
这从未奏效,if条件总是被跳过。为了解决这个问题,我引入了一个initFlag(如下面的push(...)中所示),以确保在再次调用push之前使用head初始化列表(从而附加一个数字)。这很有效,第一个数字已经成功推出。然而,现在,我再次遇到if-condition的问题,因此再次运行到SIGSEGV中。错误在这里抛出:
while(current->next != NULL){
current = current->next;
}
以下是代码:
struct node{
int value;
struct node *next;
};
void push(int value, struct node* head, bool *initFlag){
if(!(*(initFlag))){
head = (struct node*) malloc(sizeof(struct node));
head->value=value;
head->next = NULL;
*initFlag = 1;
} else{
struct node* current = head;
while(current->next != NULL){
current = current->next;
}
current->next = (struct node*) malloc(sizeof(struct node));
current->next->value = value;
current->next->next = NULL;
}
}
答案 0 :(得分:7)
它没有奏效,因为你没有设置head = null