gpt4 book ai didi

C - AVL 树旋转实现上的空指针问题

转载 作者:行者123 更新时间:2023-11-30 17:51:59 25 4
gpt4 key购买 nike

我正在用 C 语言实现 AVL 树。我在下面发布了我的树旋转,以及我在尝试测试它们时遇到的 valgrind 错误。

为什么我会收到这些错误?我知道 valgrind 错误源于我使用空指针这一事实,但我无法准确指出我做错了什么。 (我已经评论了 Valgrind 错误的行)

Tree rotateRight(Tree t)
{
Tree temp = t->L;
t->L=temp->R;
temp->R=t;
temp->height=maximum(heightT(temp->L), heightT(temp->R));
t->height=maximum(heightT(t->L), heightT(t->R));
return t;
}

Tree rotateLeft(Tree t)
{
Tree temp = t->R; //This is line 226
t->R=temp->L;
temp->L=t;
temp->height=maximum(heightT(temp->L), heightT(temp->R));
t->height=maximum(heightT(t->L), heightT(t->R));
return t;
}

Tree rotateLeftRight(Tree t)
{
t->L=rotateLeft(t->L); //Line 235
t=rotateRight(t);
return t;
}

Tree rotateRightLeft(Tree t)
{
t->R=rotateRight(t->R);
t=rotateLeft(t);
return t;
}

Valgrind 错误(我对rotateLeft 也遇到同样的情况):

==20073== Invalid read of size 8
==20073== at 0x40196F: rotateLeft (bst.c:226)
==20073== by 0x401A11: rotateLeftRight (bst.c:235)
==20073== by 0x4013A9: insertT (bst.c:69)
==20073== by 0x400E77: addin (Spell13.c:96)
==20073== by 0x400CBE: main (Spell13.c:59)
==20073== Address 0x10 is not stack'd, malloc'd or (recently) free'd
==20073==
==20073==
==20073== Process terminating with default action of signal 11 (SIGSEGV)

最佳答案

根据您拥有的代码+错误报告,Tree 看起来像这样:

typedef struct Tree_s
{
struct Tree_s *L;
struct Tree_s *R;
} Tree;

传递给 rotateLeftRightTree->L 似乎也是 NULL

关于C - AVL 树旋转实现上的空指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16395387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com