以下用于实现AVL树插入的代码&删除错误#202(堆栈溢出)。
源代码如下所示:
程序Avl_generator;使用Crt;
type p_Avl = ^ Avl_node; …
好吧,自从我上次接触Pascal已经14年了:)
所以问题确实存在 rotate_l 功能。 你过世了 a 参数 的 引用 强> 正如所示 var 关键词。
rotate_l
a
var
rotate_l(var a: p_Avl)
这导致了 a 当你覆盖时变为零 b.par , 因为 a 的 引用 强> 的地址 b.par 在那个特定的函数调用和你设置 b.par 没有。 所以 a 现在引用包含nil的内存位置。
b.par
您需要更改功能签名才能通过 a 参数 的 按价值 强> 。这是通过删除来完成的 var 关键词。
rotate_l(a: p_Avl)
堆栈溢出是由同一问题引起的 rebalance 程序:
rebalance
更改
procedure rebalance(var root: p_Avl; var n: p_Avl);
至
procedure rebalance(var root: p_Avl; n: p_Avl);
有关参数,请参阅Free Pascal语言参考 http://wiki.lazarus.freepascal.org/Parameters