我有一个带有排序算法的可执行文件(我不知道),我的实验室主要是尝试通过输入不同的情况并测试排序算法的复杂性/稳定性来解决排序算法。
我用50万行随机列表对它进行了测试,它运行良好(对50万行随机数据进行排序的时间为0.17秒)。然而,我试着输入一个包含20万行的有序列表,这就是终端提供给我的:
$ ./gen 180000 A | /usr/bin/time --format="%U seconds" ./sortB > /dev/null
Command terminated by signal 11
32.38 seconds为什么程序要这么做?如果我没记错的话,signall 11表示分段错误,对吗?所以它在试图访问不存在的内存?该算法在50万行随机列表上运行良好,在一个有序列表的17万行上执行该算法需要29.48秒(在18万行时,它给了我一个信号11)。正如我所说的,我不能访问代码,它是一个只执行的文件,但是我想不出为什么任何排序算法都会出现这个问题?
发布于 2015-09-04 06:08:11
你是对的。信号11是分割故障的信号。排序可执行文件试图访问未分配或不允许程序访问或内存不存在的内存(空内存指针或垃圾指针)。
这可能是因为排序可执行文件使用系统堆栈来执行其操作(这在递归实现排序算法时很常见)。如果要排序的数组很长,系统堆栈可能会耗尽。
尝试增加系统堆栈内存和检查。Linux中有一些增加系统堆栈内存大小的命令/方法。
我希望这能帮上忙。祝好运。
https://stackoverflow.com/questions/32390944
复制相似问题