上一节,手撕了一个红黑树。本来是要封装一下map,结果出现了一个bug是上节没有发现的。
#include"MySet.h"
#include"MyMap.h"int main()
{ltq::map<int, int> m;m.insert(make_pair(1,1));m.insert(make_pair(3,3));m.insert(make_pair(2,2));cout << m.isTrue() << endl;return 0;
}
可以看到,程序崩掉了。正好记录一个debug过程,先不要给断点,看看程序崩在哪里,直接按F5.可以看到:
可以发现,当前程序死在了对空指针的引用上。程序问题出在 左旋函数上,一般情况下我们需要对第三次的插入过程进行整体分析,因为程序有可能在左旋之前就已经发生了错误;
分析整个插入的过程:
逐步分析可以看到:
右旋函数的判断条件出现错误;至此debug结束;修改重新运行: