作者cphe (魔鬼藏在垃圾筒裡)
看板C_and_CPP
標題Re: [問題] mergesort遇到seg fault
時間Mon Jul 2 01:52:01 2018
※ 引述《a0928855286 (Alan君)》之銘言:
: 這是小弟的程式碼
: http://codepad.org/wkpNQd97
: 我參考許多網路上的mergesort做法,但是其實的沒有找到關於指標陣列的做法,於是自
: 己寫了一個
: 程式的目標是把隨機生成的1000萬組字串做排序
: 但是最後出現了seg fault
: 這是以下的debugger的提示
: https://i.imgur.com/uIHkVO0.jpg
: 我有試過把1000萬筆改成小於100筆,就成功了!
: 所以不知道是出現了什麼問題QQ
: 會不會是太多筆資料嗎?
首先,把63行型態改對
再來就是,stack爆了
我的電腦可以跑到10萬筆,100萬就爆了
merge_sort一直call進去沒問題,只要一進merge就會掛掉
因為merge一開頭就宣告兩個超大的local variable array
stack在這邊就被吃完
(如果你有用debugger,試著把斷點設定進merge前,把merge array改小就不會死)
我試著把我的環境process stack改成65532KB(預設8192KB)
100萬筆就可以跑過,1000萬一樣掛掉
其實merge裡面的那兩個array size是可以算出來的
假設pointer佔4個byte,也是輕鬆爆掉
結論就是,試著都改用動態配置(heap)
還有用完要free...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.165.215
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530467523.A.83F.html
→ cphe: 忘了說,allocate memory之後記得要檢查是否有沒有成功,是 07/02 02:04
→ cphe: 有可能失敗的 07/02 02:04
推 a0928855286: 感謝大大的協助,經過調整之後,就沒問題了!我沒有 07/03 00:00
→ a0928855286: 注意到我進merge的時候,leftsub和rightsub是用stack 07/03 00:00
→ a0928855286: ! 07/03 00:00