作者a0928855286 (Alan君)
看板C_and_CPP
標題[問題] mergesort遇到seg fault
時間Sun Jul 1 18:20:03 2018
這是小弟的程式碼
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掉了~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.217.192.117
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530440405.A.1CD.html
→ johnpage: 序法%28merge-sort%2907/01 18:38
推 jobsdone: stack爆了吧 看起來是這樣07/01 20:39
→ tinlans: 你在 linux 下嗎? 要不要開 address sanitizer 查一下?07/01 20:39
→ sarafciel: 聽描述感覺是stack炸掉+107/01 20:44
→ tinlans: 就算 Max_data 調 100,valgrind 還是有報 85 行有非法07/01 20:49
→ tinlans: 寫入,不過在忙別的沒空細看。07/01 20:49
→ tinlans: 只是 stack 爆掉的話可以改成動態配置。07/01 20:58
→ tinlans: 你解釋一下為什麼 63 行 malloc() 裡面是用 sizeof(char)07/01 21:09
→ tinlans: 去乘以 Max_data。07/01 21:09
→ Lipraxde: 東西要了沒用也不free,malloc不保證一定要的到空間07/01 21:40
推 cphe: 100筆跑出來是對的嗎?07/02 00:36
推 cphe: 上面說的sizeof型態先改對看看07/02 00:39
※ 編輯: a0928855286 (49.217.192.117), 07/02/2018 23:58:31
※ 編輯: a0928855286 (49.217.192.117), 07/02/2018 23:59:24