[STL] list<int>操作 segmentation fault

看板C_and_CPP作者 (倚絃)時間15年前 (2010/11/08 19:10), 編輯推噓4(4011)
留言15則, 6人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 餓死抬頭 希望得到的正確結果: 不要 run-time error 程式跑出來的錯誤結果: segme.... 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Ubuntu 10.04 有問題的code: (請善用置底文標色功能) struct BUCKET { list<int> cellit; }; BUCKET *listA, *listB; main: listA = new BUCKET[...]; listB = net BUCKET[...]; for(...) { 從BUCKET中取出key最大的第一個元素 int n = listA[max_key].front(); listA[max_key].pop_front(); process(); } del ... del ... end process: ... for list<int>::iterator it := 某個list<int>取出的值 then do operate(*it, old, new) end operate: n, old, new listA[old].erase(一個確定存在listA[old]內的it) listA[new].push_back(n) end 補充說明: 標紅色那行發生了問題... 即是取出的list.front() 為無意義的值 進一步要檢查list.size()或調用 begin(), end() 等method 都出現segmantation fault 反倒是list.empty()為false 沒有出錯 google了下 都是抱怨文 沒有解決文... 嗯 ... 一直想說STL的可靠度不低的... code可能不甚清楚... 希望有版友碰過相關問能 能提供解答 感謝 -- ╮ ╮   ╭┬ ╭─┐┬╮ ◢█▍◢██◣ ─┼─┬┼─ ╰┼──┼╮ │ ╯╮│││ █▉ █▉██ ╮│ ││ ╭─┼─╮ │ └┴┘└┼ ██// █▉ ◥███ ├┼╮├┼╮ │ │ │ │ ├─┼─╮ █ █// █▉ ◥██◤ ││ │││ ┴─┼─┴ │ ╭╯├─╮ ╯│─╯│╰ ○╰─╯╰─╯ ○ ┴ ╯ ┴ ╰ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.35.216

11/08 19:49, , 1F
這程式碼好像太簡略到看不出錯誤發生原因@@"
11/08 19:49, 1F

11/08 19:49, , 2F
也可能是我太弱看不出來XD
11/08 19:49, 2F

11/08 20:18, , 3F
我也是覺得有點精簡...
11/08 20:18, 3F

11/08 20:19, , 4F
不過我猜很有可能是指標已經被delete了但沒有pop
11/08 20:19, 4F

11/08 20:19, , 5F
或者忘記new之類的萬年錯誤...
11/08 20:19, 5F

11/08 20:26, , 6F
listA只new一次 並且未曾作更動 只動struct內的東西
11/08 20:26, 6F

11/08 20:27, , 7F
我會建議你用gdb去跑跑看...這種錯誤很麻煩...
11/08 20:27, 7F

11/08 20:34, , 8F
嗯 嘗試中
11/08 20:34, 8F

11/08 21:16, , 9F
Struct只有預設初始化所以list也是default,你沒push
11/08 21:16, 9F

11/08 21:16, , 10F
進去之前怎麼取得出值???
11/08 21:16, 10F

11/08 21:18, , 11F
檢查一下max_key有沒有超過你new的array size..
11/08 21:18, 11F

11/08 21:20, , 12F
我覺得原po只是省略了push的敘述,應該不是忘了
11/08 21:20, 12F

11/08 22:42, , 13F
嗯 有push 因為試跑20萬筆資料 在3000筆左右出錯
11/08 22:42, 13F

11/11 13:11, , 14F
抱歉@@"要試試看自行寫一個list試試看嗎XD?
11/11 13:11, 14F

11/21 23:42, , 15F
後來忘記這篇文了- -" 是list.erase()弄亂記憶體了
11/21 23:42, 15F
文章代碼(AID): #1CrzgLwH (C_and_CPP)