我对C还很陌生,想创建一个链表。对于列表元素,我创建了一个结构,并希望初始化函数中的head元素。当我到达末尾时,列表的最后一个元素应该包含一个空指针。但是如果我在函数内部将next
初始化为NULL;分段故障(堆芯倾倒(";
我试着用谷歌搜索这个,但没有找到答案。之后,我将函数中的代码放入我的main中,它就工作了。但为什么呢?这是完全相同的代码。
内部功能:
#include <stdlib.h>
struct list_node
{
unsigned long value;
struct list_node *next;
};
void new_list()
{
struct list_node *cache;
cache->next = NULL;
}
int main()
{
new_list();
return 0;
}
内部干线:
#include <stdlib.h>
struct list_node
{
unsigned long value;
struct list_node *next;
};
int main()
{
struct list_node *cache;
cache->next = NULL;
return 0;
}
您声明了一个具有不确定值的未初始化指针。
void new_list()
{
struct list_node *cache;
cache->next = NULL;
}
因此取消引用指针
cache->next = NULL;
调用未定义的行为。
第二个程序中也存在同样的问题
int main()
{
struct list_node *cache;
cache->next = NULL;
return 0;
}
这是第二个程序也有未定义的行为。
你应该做的只是写
int main()
{
struct list_node *cache = NULL;
return 0;
}
这是最初你的列表是空的。因此最初没有分配类型为struct list_node
的对象,并且指针cache
等于NULL
。