在這個 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 嗎?
期待回覆,謝謝!