反向链表C
您好,我写了这个链表反向函数。但是它不起作用(空响应):我怀疑这是因为上一个索引被覆盖了。有人能解释一下发生了什么事吗?我知道我可以在网上找到工作代码,但我想知道我做错了什么 谢谢反向链表C,c,linked-list,C,Linked List,您好,我写了这个链表反向函数。但是它不起作用(空响应):我怀疑这是因为上一个索引被覆盖了。有人能解释一下发生了什么事吗?我知道我可以在网上找到工作代码,但我想知道我做错了什么 谢谢 这实际上应该是sizeof(*root)-您需要的内存块的大小是指向的结构的大小,而不是指针的大小。因此,您可能会覆盖内存中刚刚超过所分配的指针大小的块的内容,从而导致,其中可能包含任何与预期工作不符的内容。这看起来几乎是正确的。我看到一个问题:sizeof(root)与sizeof(node*)相同。也就是说,它有
这实际上应该是
sizeof(*root)
-您需要的内存块的大小是指向的结构的大小,而不是指针的大小。因此,您可能会覆盖内存中刚刚超过所分配的指针大小的块的内容,从而导致,其中可能包含任何与预期工作不符的内容。这看起来几乎是正确的。我看到一个问题:sizeof(root)
与sizeof(node*)
相同。也就是说,它有足够的空间作为指向节点的指针
您需要足够的空间来容纳实际的
节点
结构。所以mallocsizeof(*root)
bytes(或sizeof(node)
,两者相同)。如果您想知道,请使用调试器。是否要求您创建一个反向的新列表?您可以就地反转列表,而不创建被反转的新列表。“这个问题是由无法再复制的问题或简单的印刷错误引起的。”代码是正确的(遍历原始列表,并使用新分配的节点将项目的副本推到堆栈上。只是malloc是错误的。)
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;
}
xnew = malloc(sizeof(root));