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;
}