Re: [問題] mergesort遇到seg fault

看板C_and_CPP作者 (魔鬼藏在垃圾筒裡)時間7年前 (2018/07/02 01:52), 編輯推噓1(104)
留言5則, 2人參與, 7年前最新討論串2/2 (看更多)
※ 引述《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

07/02 02:04, 7年前 , 1F
忘了說,allocate memory之後記得要檢查是否有沒有成功,是
07/02 02:04, 1F

07/02 02:04, 7年前 , 2F
有可能失敗的
07/02 02:04, 2F

07/03 00:00, 7年前 , 3F
感謝大大的協助,經過調整之後,就沒問題了!我沒有
07/03 00:00, 3F

07/03 00:00, 7年前 , 4F
注意到我進merge的時候,leftsub和rightsub是用stack
07/03 00:00, 4F

07/03 00:00, 7年前 , 5F
07/03 00:00, 5F
文章代碼(AID): #1REHJ3W_ (C_and_CPP)
文章代碼(AID): #1REHJ3W_ (C_and_CPP)