Re: [问题] mergesort遇到seg fault

楼主: cphe (魔鬼藏在垃圾筒里)   2018-07-02 01:52:01
※ 引述《a0928855286 (Alan君)》之铭言:
: 这是小弟的程式码
: http://codepad.org/wkpNQd97
: 我参考许多网络上的mergesort做法,但是其实的没有找到关于指标阵列的做法,于是自
: 己写了一个
: 程式的目标是把随机生成的1000万组字串做排序
: 但是最后出现了seg fault
: 这是以下的debugger的提示
: https://i.imgur.com/uIHkVO0.jpg
: 我有试过把1000万笔改成小于100笔,就成功了!
: 所以不知道是出现了什么问题QQ
: 会不会是太多笔资料吗?
首先,把63行型态改对
再来就是,stack爆了
我的电脑可以跑到10万笔,100万就爆了
merge_sort一直call进去没问题,只要一进merge就会挂掉
因为merge一开头就宣告两个超大的local variable array
stack在这边就被吃完
(如果你有用debugger,试着把断点设定进merge前,把merge array改小就不会死)
我试着把我的环境process stack改成65532KB(默认8192KB)
100万笔就可以跑过,1000万一样挂掉
其实merge里面的那两个array size是可以算出来的
假设pointer占4个byte,也是轻松爆掉
结论就是,试着都改用动态配置(heap)
还有用完要free...
楼主: cphe (魔鬼藏在垃圾筒里)   2018-07-02 02:04:00
忘了说,allocate memory之后记得要检查是否有没有成功,是有可能失败的
作者: a0928855286 (Alan君)   2018-07-03 00:00:00
感谢大大的协助,经过调整之后,就没问题了!我没有注意到我进merge的时候,leftsub和rightsub是用stack!

Links booklink

Contact Us: admin [ a t ] ucptt.com