Re: [問題] mergesort遇到seg fault

作者: cphe (魔鬼藏在垃圾筒裡)   2018-07-02 01:52:01
※ 引述《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...
作者: cphe (魔鬼藏在垃圾筒裡)   2018-07-02 02:04:00
忘了說,allocate memory之後記得要檢查是否有沒有成功,是有可能失敗的
作者: a0928855286 (Alan君)   2018-07-03 00:00:00
感謝大大的協助,經過調整之後,就沒問題了!我沒有注意到我進merge的時候,leftsub和rightsub是用stack!

Links booklink

Contact Us: admin [ a t ] ucptt.com