[问题] 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