链接列表程序崩溃

时间:2013-01-15 20:14:25

标签: c linked-list

我使用结构实现了一个包含3个元素的链表。在我介绍用于计算链表Linked_list中的元素数量的函数之前,它工作正常。以下是C中程序的代码。

C

#include <stdlib.h>
#include <stdio.h>

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

struct node* Linked_list();

int Length();

int main()
{
    int length;
    Linked_list();
    length = Length();
    printf("%d", length);
}

struct node* Linked_list() {
    struct node* head = NULL;
    struct node* second = NULL;
    struct node* third = NULL;

    head = malloc(sizeof(struct node));
    second = malloc(sizeof(struct node));
    third = malloc(sizeof(struct node));

    head->data = 1;
    head->next = second;

    second->data = 2;
    second->next = third;

    third->data = 3;
    third->next = NULL;

    printf("%d %d", head->data, second->data);
}

int Length(struct node* head){
    struct node* current = head;
    int count = 0;

    while(current!=NULL)
    {
        count++;
        current = current->next;
    }
    return count;
}

1 个答案:

答案 0 :(得分:1)

您正在声明并致电Length(),因为它没有参数length = Length();

但是当你定义它时,它确实有一个参数:

int Length(struct node* head)

这是合法的,但会发生的是实际的函数没有得到head参数,这就是它崩溃的原因。

您应该从head(当前未返回任何内容)返回Linked_list()并将其反馈给Length()

struct node* Linked_list() {
    ....

    printf("%d %d", head->data, second->data);
    return  head;
}

然后是主要的:

struct node* head = Linked_list();
length = Length(head);

但可能还有其他问题。