node *rever(node *root)
{
node *prev = NULL;
node *xnew = NULL;
while (root != NULL) {
xnew = malloc(sizeof(root));
xnew->value = root->value;
xnew->next = prev;
prev = xnew;
root = root->next;
}
return xnew;
}
您好我写了这个链表反向函数。然而,它没有工作(空响应):我怀疑它是因为prev索引被覆盖。有人能解释我发生了什么事吗?我知道我可以在互联网上找到工作代码,但我想知道我做错了什么。
由于
答案 0 :(得分:3)
这看起来很接近正确。我看到一个问题:sizeof(root)
与sizeof(node*)
相同。也就是说,它足以容纳指向节点的指针。
您需要足够的空间来容纳实际的node
结构。所以malloc sizeof(*root)
字节(或sizeof(node)
,这是相同的。)
答案 1 :(得分:0)
xnew = malloc(sizeof(root));
那应该是sizeof(*root)
- 你想要一个内存块指向的结构大小,而不是指针的大小。因此,您可能会覆盖刚刚超出您分配的指针大小的块的内存,从而生成undefined behavior,其中可能包含从预期工作到causing demons to fly out of your nose的任何内容