作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1530440405.A.1CD.html
2F:→ johnpage: 序法%28merge-sort%2907/01 18:38
3F:推 jobsdone: stack爆了吧 看起来是这样07/01 20:39
4F:→ tinlans: 你在 linux 下吗? 要不要开 address sanitizer 查一下?07/01 20:39
5F:→ sarafciel: 听描述感觉是stack炸掉+107/01 20:44
6F:→ tinlans: 就算 Max_data 调 100,valgrind 还是有报 85 行有非法07/01 20:49
7F:→ tinlans: 写入,不过在忙别的没空细看。07/01 20:49
8F:→ tinlans: 只是 stack 爆掉的话可以改成动态配置。07/01 20:58
9F:→ tinlans: 你解释一下为什麽 63 行 malloc() 里面是用 sizeof(char)07/01 21:09
10F:→ tinlans: 去乘以 Max_data。07/01 21:09
11F:→ Lipraxde: 东西要了没用也不free,malloc不保证一定要的到空间07/01 21:40
12F:推 cphe: 100笔跑出来是对的吗?07/02 00:36
13F:推 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