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

楼主: kiwaygo (鸡尾酒)   2011-12-13 03:20:55
在这个 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 吗?
期待回复,谢谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com