[問題] STL裡list刪除的問題

看板C_and_CPP作者 (阿堤)時間13年前 (2012/05/13 14:20), 編輯推噓1(109)
留言10則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我有一個樹狀結構 裡面存有10000多個節點 要做skyline查詢 共跑500次 每次查詢都有一個新的query point 然後從root開始查詢 例:http://ppt.cc/hO@7 查詢演算法裡我需要一個list<RST_Node*> skyline 紀錄可能為skyline的節點 這個list會用到push_back, pop_front, erase等函數 但是erase好像沒有把記憶體讓出來 導致沒辦法跑完500次查詢 請問這個狀況該怎麼處理? 餵入的資料(Input): R*-tree,500個query point 預期的正確結果(Expected Output): 跑完500次BFS DFS的搜尋 錯誤結果(Wrong Output): std::bad_alloc 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.110.139

05/13 22:38, , 1F
先delete再erase
05/13 22:38, 1F

05/13 22:40, , 2F
我試過 但是這個tree我要查500次
05/13 22:40, 2F

05/13 22:41, , 3F
delete後下次查詢就錯了
05/13 22:41, 3F

05/14 00:30, , 4F
可以試試看每 query 一次以後印出 list 的大小,
05/14 00:30, 4F

05/14 00:30, , 5F
看這個大小是不是符合期待
05/14 00:30, 5F

05/14 00:31, , 6F
建議簡化程式之後貼上來看看
05/14 00:31, 6F

05/14 03:35, , 7F
std::bad_alloc 是 std::allocator<T>::allocate 丟出
05/14 03:35, 7F

05/14 03:36, , 8F
來的吧, 確認出例外的code在哪不要自己猜
05/14 03:36, 8F

05/14 10:29, , 9F
這表示你的 node 還有別人需要 reference,你搞不清楚如
05/14 10:29, 9F

05/14 10:29, , 10F
何做記憶體管理。不如用 smart pointer 包起來算了
05/14 10:29, 10F
文章代碼(AID): #1FhyCfYe (C_and_CPP)