这是一个相当简单的项目,我花了大约20个小时在这个项目上兜圈子,没有任何进展。一开始我似乎是朝着正确的方向前进,但我有一个助教试图向我解释,它扭曲了我的大脑,让我回到了起点。
我知道这很可能是一个简单的错误,所以我将邮政编码以及我的解释。注意:Assert函数不是问题
IN H FILE
struct Node {
int num;
Node *next;
};
CPP文件void Intset::insert(int key)
{
Node * current;
current->num = key;
current->next = NULL;
assert (!find(key));
if(head == NULL)
{
head = current;
}
else if(head->num >= key)
{
head->next = head;
head = current;
}
else if(head->num < key)
{
head->next = current;
}
所以我在这个函数(插入键到一个排序的链表)背后的想法过程是创建一个新的节点当前,并使用用户输入的键填充其num字段,并使其下一个字段等于NULL。我的第一个检查是看看是否头是空的,如果它是复制当前的内容到它。我的第二个检查是查看head的num字段是否包含大于或等于用户输入的key的数字。
如果是,我将头部节点移动到下一个节点,并用当前节点(前面的数字较小)替换它。我的第三个检查是查看head中的数字是否小于用户输入的键,如果是,它将用current填充head的下一个字段(较小的数字先出现)。到目前为止,我遇到了segfault错误,我不确定我分配错误。
从这里开始:
Node * current;
current->num = key;
current->next = NULL;
current
点在哪里?您正在解引用一个未初始化的指针。这是undefined behavior
,很可能导致隔离故障。