[問題] mergesort遇到seg fault

作者: a0928855286 (Alan君)   2018-07-01 18:20:03
這是小弟的程式碼
http://codepad.org/wkpNQd97
我參考許多網路上的mergesort做法,但是其實的沒有找到關於指標陣列的做法,於是自
己寫了一個
程式的目標是把隨機生成的1000萬組字串做排序
但是最後出現了seg fault
這是以下的debugger的提示
https://i.imgur.com/uIHkVO0.jpg
我有試過把1000萬筆改成小於100筆,就成功了!
所以不知道是出現了什麼問題QQ
會不會是太多筆資料嗎?
===========================
很感謝有這麼多人提供意見和協助我QQ 目前是完全debug成功了
所以想說統一在貼文中表達感謝!
資料跑出來,前10萬筆和後10萬筆都沒有出錯!
解決過程:
1.的確像版上各位大大所說,stack爆了,主要是爆在剛進merge的時候,宣告的leftsub
和rightsub,改成使用heap,就解決了(感謝cphe大大的回應!)
2.很抱歉,我沒有注意到63行,sizeof的部份應該要宣告(char*)
3.我會好好注意free的部份,我有把每個不用的malloc過的東西都free掉了~
作者: johnpage (johnpage)   2018-07-01 18:38:00
https://emn178.pixnet.net/blog/post/87965707-合併排序法%28merge-sort%29
作者: jobsdone (完工了)   2018-07-01 20:39:00
stack爆了吧 看起來是這樣
作者: tinlans ( )   2018-07-01 20:39:00
你在 linux 下嗎? 要不要開 address sanitizer 查一下?
作者: sarafciel (Cattuz)   2018-07-01 20:44:00
聽描述感覺是stack炸掉+1
作者: tinlans ( )   2018-07-01 20:49:00
就算 Max_data 調 100,valgrind 還是有報 85 行有非法寫入,不過在忙別的沒空細看。只是 stack 爆掉的話可以改成動態配置。你解釋一下為什麼 63 行 malloc() 裡面是用 sizeof(char)去乘以 Max_data。
作者: Lipraxde (Lipraxde)   2018-07-01 21:40:00
東西要了沒用也不free,malloc不保證一定要的到空間
作者: cphe (魔鬼藏在垃圾筒裡)   2018-07-02 00:36:00
100筆跑出來是對的嗎?上面說的sizeof型態先改對看看

Links booklink

Contact Us: admin [ a t ] ucptt.com