C 从insert_beg()函数中取出时,分配给指针的内存不会保留或丢失

C 从insert_beg()函数中取出时,分配给指针的内存不会保留或丢失,c,linked-list,pass-by-reference,singly-linked-list,function-definition,C,Linked List,Pass By Reference,Singly Linked List,Function Definition,一旦我们离开函数insert_beg,分配给head pointer的内存就会丢失,head pointer再次变为NULL。尽管我正在传递指针,但为什么会出现这种行为?请指导我如何保留malloc()分配的内存块 #包括 结构节点 { int数据; 结构节点*下一步; }; void insert_beg(结构节点*头部,整数数据) { if(head==NULL) { 结构节点*tmp_节点; tmp_node=(结构节点*)malloc(sizeof(结构节点)); tmp_节点->数据=

一旦我们离开函数insert_beg,分配给head pointer的内存就会丢失,head pointer再次变为NULL。尽管我正在传递指针,但为什么会出现这种行为?请指导我如何保留malloc()分配的内存块

#包括
结构节点
{
int数据;
结构节点*下一步;
};
void insert_beg(结构节点*头部,整数数据)
{
if(head==NULL)
{
结构节点*tmp_节点;
tmp_node=(结构节点*)malloc(sizeof(结构节点));
tmp_节点->数据=数据;
tmp_节点->下一步=空;
head=tmp_节点;
}
其他的
{
结构节点*tmp_节点;
tmp_node=(结构节点*)malloc(sizeof(结构节点));
tmp_节点->数据=数据;
tmp_节点->下一步=头部;
head=tmp_节点;
}
}
无效显示(结构节点*头部)
{
if(head==NULL)
{
printf(“下溢”);
}
其他的
{
结构节点*tmp=head;
while(tmp!=NULL)
{
printf(“%d”,tmp->data);
tmp=tmp->next;
}
}
}
int main()
{
结构节点*head=NULL;
插入_beg(头,12);
显示器(头部);
} ```
预期产出:12
观测输出:下溢

函数
insert\u beg
处理传递给它的指向头部节点的指针值的副本。参数
struct node*head
是函数的局部变量,该函数获取指向head节点的原始指针值的副本。因此,局部变量的更改不会影响用作参数的原始指针

应该通过引用将指针传递到头部节点

在C中,通过引用传递意味着通过指向对象的指针间接传递对象

函数可以通过以下方式声明和定义

int insert_beg( struct node **head, int data )
{
    struct node *tmp_node = malloc( sizeof( struct node ) );
    int success = tmp_node != NULL;

   
    if ( success )
    {
        tmp_node->data = data;
        tmp_node->next = *head;
        *head = tmp_node;
    }

    return success;
}
这个函数可以像这样调用

insert_beg( &head, 12 );
或者

if ( !insert_beg( &head, 12 ) )
{
    puts( "There is no enough memory" );
}

您正在传递指针的副本。当在函数中修改时,更改不会反映在调用模块中。您需要将一个指针传递给一个指针。。。正在寻找合适的重复问题。
insert\u beg
函数的
head
参数的行为类似于局部变量。可能的重复:
if ( !insert_beg( &head, 12 ) )
{
    puts( "There is no enough memory" );
}