函数在创建链接列表时返回null值

时间:2013-09-15 04:57:05

标签: c

我创建了一个函数,它将返回链表的基址。 它总是返回最后一个节点地址(null)而不是第一个节点。

#include<stdio.h>
#include<stdlib.h>
typedef struct _LinkedList
{
    int data;
    struct LinkedList *nextVal;
}LinkedList;


//function to create a linked list
LinkedList* createLL()
{
    LinkedList *ll;
    ll=malloc(sizeof(LinkedList));
    ll->nextVal =malloc(sizeof(LinkedList));
    int i;
    int count = 5;
    for(i=0;i<5;i++)
    {
        ll->nextVal = malloc(sizeof(LinkedList));
        ll->data = i;
        printf("LL data value %d address val %p\n ",ll->data,ll->nextVal);

    }
    //last node should point to null
    ll->nextVal=NULL;
    printf("======================\n");
    return ll;
}


int main()
{

    LinkedList *basePtr;
    int i;
    basePtr=createLL();
    for(i=0;i<5;i++)
    {
         printf("LL data value %d address val %p\n ",basePtr->data,basePtr->nextVal);   

    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

createLL()main()中,在两个for循环内,您不更新列表的头指针,只是覆盖原始指针。 (例如,你没有链表,你有五个悬空节点,其中四个是泄漏内存)。这样的事情怎么样:

LinkedList *createLL()
{
     LinkedList *head = NULL;

     for (int i = 0; i < 5; i++) {
         // use sizeof(*pointer) instead of sizeof(type), by the way
         LinkedList *tmp = malloc(sizeof(*tmp));
         tmp->next = head;
         tmp->data = i;
         head = tmp;
     }

     return head;
}

main()中重复这个模式,你很高兴。