C语言链表指针问题

在学习C语言数据结构时,遇到链表元素添加的问题。原本尝试通过非动态方式创建节点,导致在添加元素后,节点在主函数中无法访问,输出时发生死循环。原因是节点未动态分配内存,生命周期仅限于添加函数内部。修改为使用`malloc`动态申请内存后,解决了该问题,确保节点在程序中持久存在。
摘要由CSDN通过智能技术生成

C语言链表指针问题

项目场景:

最近在学习数据结构,自己尝试用C语言自己来完成,在书写的过程中发现了一些问题
环境:
win10的linux子系统Ubuntu18.04
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)


问题描述:

就是在书写添加元素的函数时,自己没有动态申请数据,而是自己通过创建普通变量的形式添加的,添加后,回到main函数中开始输出每一个元素的值,这个时候因为回到了main函数,所以原来在添加元素函数中创建的节点已经删除了.但是输出的时候却停不下来,进入了死循环.原来是当那个节点消失以后上一个节点的指针指向了最开始的节点.

自己添加元素的代码:

void insertElement(listNode *h,int i,int val)
{
    listNode *temp = h;
    for(int n=1;n<i;n++)
    {
        temp = temp->next;
    }
    //创建新的节点
    listNode *node;//为题主要在这里
    node->val = val;
    node->next = temp->next;
    temp->next = node;
}

原因分析:

这里可能时编译器做了什么优化吧,不太明白,希望有大佬给解释一下为什么


解决方案:

void insertElement(listNode *h,int i,int val)
{
listNode *temp = h;
for(int n=1;n<i;n++)
{
temp = temp->next;
}
//创建新的节点
listNode *node = (listNode *)malloc(sizeof(listNode));//改成动态申请
node->val = val;
node->next = temp->next;
temp->next = node;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值