当程序到达addnode()函数时,我收到下面代码的分段错误。所以我不知道其他地方是否会出现任何问题,因为流程没有进展
<form method="POST" action="">
{% csrf_token %}
{{ form.as_p }}
</form>
<button type="submit">Save</button>
不允许使用类。我想要&#39; head&#39;在除destroytree()之外的所有情况下指向列表的开头。要将节点添加到列表末尾,请从“头部”开始。继续前进到下一步是NULL。要销毁树,请打印第一个元素然后将其删除。打印下一个元素并将其删除,直到node-&gt; next为NULL
答案 0 :(得分:1)
问题在这里
head=new node;
head=NULL; // Remove this line
将new
分配的内存分配给head
后,用null
覆盖它并尝试取消引用它。
此外,您还可以取消引用NULL
指针
if(trav==NULL)
{
trav->value=no;
trav->next=NULL;
return;
}
由于它是多余的,您应该删除它并使用以下
n->value=no;
n->next=NULL;
n = (trav != NULL ? trav->next : head);
nullptr
属于指针类型,而NULL
倾向于为整数,因此请C++11
及更高版本使用nullptr
。
答案 1 :(得分:1)
您正在取消引用一个没有意义的空指针。 你也在重复自己的代码,所以也许你没有考虑你正在做什么。
if(trav==NULL)
{
trav->value=no;
trav->next=NULL;
return;
}
n->value=no;
n->next=NULL;
trav->next=n;
除了将值分配给节点之外,您要做的就是将新节点放入列表的末尾。如果你没有通过遍历列表找到它,那是因为列表是空的,所以列表的末尾是头部。
n->value=no;
n->next=NULL;
(trav != NULL ? trav->next : head) = n;
答案 2 :(得分:0)
Starting Go Routines
Waiting To Finish
a b 1 2 3 4 c d e f 5 g h 6 i 7 j 8 k 9 10 11 12 l m n o p q 13 r s 14
t 15 u v 16 w 17 x y 18 z 19 20 21 22 23 24 25 26
Terminating Program
您正尝试取消引用空指针 删除该段代码,并将以下内容添加到addnode的开头:
if(trav==NULL)
{
trav->value=no;
trav->next=NULL;
return;
}
这也允许您从if(head == NULL)
{
head = new node;
head->value = no;
head->next = NULL;
return;
}
循环条件中删除trav == NULL
。
另请注意,主要是
while
因此,您正在为节点分配内存,然后您将丢弃您对该内存地址的唯一引用
您应该删除其中的第一个,并且可以将头部的分配替换为头部的定义(读取head=new node;
head=NULL;
的行,将其替换为NULL
)
最后,如果您有符合c ++ 11标准的编译器,请使用node *head;
代替node *head = NULL;
。