在mutile函数调用期间指向当前节点的节点指针

时间:2017-03-30 05:33:09

标签: c pointers linked-list

我已经声明了一个全局指针ptr,并希望它在不同的函数调用期间指向当前节点。

这是一个示例代码,我在fun1中创建一个新节点并在链接列表中插入。在func2中,我想使用不同的值更新linklist中newNode的其他成员。

目前我正在遍历链接列表以获取我不想要的当前节点或最后一个节点,因为在插入新记录期间我们必须遍历以到达最后一个节点,从而存储最后一个节点的地址。

但是通过以下操作,我得不到合适的值。请有人建议我哪里出错。

我这样做:

#include<stdio.h>
#include <stdlib.h>
struct Node
{
    int data1;
    int data2;
    struct Node* next;
};
struct Node* head=NULL;
struct Node* ptr =NULL;                    /* Global pointer  */
void insertNode(struct Node ** , struct Node* );
void fun1();
void fun2();


void fun1()
{  
    struct Node* ptr1 =NULL;
    ptr1 = (struct Node*)malloc(sizeof(struct Node*));
    ptr1->data1=1; /* intilaizing with some values */
    insertNode(&head,ptr1);
}

void fun2()
{
    /* Updating the current Node in the linklist with new value . */ 
    ptr->data2=2;

}

void insertNode(struct Node ** head, struct Node* NewRec)
{

if(*head ==NULL ) 
{
    NewRec->next = *head;
   *head = NewRec;
    ptr=*head;
}
else
{
/* Locate the node before the point of insertion */
    struct Node* current=NULL;
    current = *head;
    while (current->next!=NULL )
    {
        current = current->next;
    }
    NewRec->next = current->next;
    current->next = NewRec;
    ptr=current->next;

    }
}
int main ()
{
    fun1();
    fun2();
    while(head!=NULL)
    {
        printf("%d", head->data1);
        printf("%d",head->data2);
        head=head->next;
    }
    return 0;

}

1 个答案:

答案 0 :(得分:0)

你犯了一个经典错误。

这是错误的:

ptr1 = (struct Node*)malloc(sizeof(struct Node*));

这里分配的空间是sizeof(struct Node*),它是指针的大小(通常为4或8个字节,具体取决于平台)。但是您需要为整个struct Node结构分配空间,其大小为sizeof(struct Node)

所以你只需要这个:

ptr1 = (struct Node*)malloc(sizeof(struct Node));
顺便说一句:在C中,你不会投出malloc的返回值,所以你实际上应该这样写:

ptr1 = malloc(sizeof(struct Node));