看板 C_and_CPP 關於我們 聯絡資訊
這是小弟的程式碼 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: https://emn178.pixnet.net/blog/post/87965707-合併排07/01 18:38
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