c语言中简单列表的“分段故障”错误消息

ykejflvf  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(121)
#include <stdio.h>
#include <stdlib.h>

struct node{
    int data;
    struct node *next;
};

void printList(struct node *head);

int main() {
    struct node* head;
    head->data =10;
    head->next = NULL;
    printList(head);    
}

void printList(struct node *head){
    struct node *ptr = head;
    if (ptr->next = NULL){
        printf("list is empty");
    }
    while(ptr != NULL){
        printf("%d", ptr->data);
        ptr = ptr->next;
    }
}

我试图实现一个简单列表结构,但是遇到了一个分段错误。
有什么线索吗?

7uhlpewt

7uhlpewt1#

您的代码存在一些问题
1.在main函数中,head指针没有初始化,你需要为它将要指向的对象分配内存。

struct node* head = malloc(sizeof(struct node));

1.在printList函数中,if语句使用“=”赋值运算符而不是“==”比较运算符

if (ptr->next == NULL){
    printf("list is empty");
}
des4xlb0

des4xlb02#

这里有不同的问题。更好地检查指针在c中是如何工作的。
当你写struct node* head;这样的东西时,你只是添加了一个地址内存,指向另一个未定义的空间区域,所以,为了生成一些东西,你应该在访问那个内存区域和设置数据之前在里面分配一些内存。
另一个问题是printList函数中的第一个if条件应该包含'=='而不是'='

相关问题