c-为什么我可以在主函数中为指针指定NULL,但在其他函数中却不能使用完全相同的代码



我对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

相关内容

  • 没有找到相关文章

最新更新