Re: [问题] 请问作业五 driver test 2

楼主: TimeString (时弦 - 我要DJmax的pc版!)   2011-12-13 10:45:58
Hi 同学,
我觉得你的问题很好!
但有些地方我想修正一下,
以 test2 测 lo_key = 10000 来讲,
其实就是在测 如果 lo_key 比 btree 里面的所有 key 还大的话,
这时该怎么办。
而希望的作法是,在 findRunStart 不要回传 Error (就仍然回传 OK),
只不过 RID 会被设为 invalid。
如果你直接呼叫 BTLeafPage 里的 get_next() 应该就会没问题。
参考一下 get_next() 吧!
※ 引述《kiwaygo (鸡尾酒)》之铭言:
: 在这个 test 中
: driver 会用很多不合理的 scan range 来测试 B+ tree
: 读了 btree_driver.C 后可知
: driver 检察 B+ tree正确性的作法
: 是先从 BTreeFile::new_scan(...) 中拿到 IndexFileScan 物件
: 然后检查 IndexFileScan::get_next(...) ?= OK
: 若其 == OK 则程式是不正确的
: 我遇到的问题如下:
: BTreeFile::new_scan(...) 会呼叫 BTreeFile::findRunStart(...) 找出 scan range
: 当我们写的程式在 BTreeFile::findRunStart(...)
: 接到不合理的 lo_key 时 (例如 lo_key == 10000)
: 理论上,findRunStart 应回传 error 给呼叫他的 BTreeFile::new_scan(...)
: 然后 new_scan 就会因此向再上一层的 driver 回传 NULL pointer
: 不幸的是,btree_driver.C 中
: driver 并未检查拿到的 IndexFileScan* 是否为 NULL pointer
: 就直接呼叫其 IndexFileScan::get_next(...) method
: 结果就变成了 segmentation fault
: 想请问助教或同学们,在findRunStart(...) 中
: 若接到不合理的 lo_key
: 究竟应该如何处理呢?
: 有办法回传 error 但又不会在 driver 产生 segmentation fault 吗?
: 期待回复,谢谢!
作者: kiwaygo (鸡尾酒)   2011-12-13 14:15:00
谢谢助教!

Links booklink

Contact Us: admin [ a t ] ucptt.com