我运行代码时出现了 Segmentation Fault: 11
错误,但我不知道为什么。
在深入解释之前,这是我的代码:
import numpy.random as nprnd
import heapq
import sys
sys.setrecursionlimit(10**6)
def rlist(size, limit_low, limit_high):
for _ in xrange(size):
yield nprnd.randint(limit_low, limit_high)
def iterator_mergesort(iterator, size):
return heapq.merge(
iterator_mergesort(
(iterator.__next__ for _ in xrange(size/2)), size/2),
iterator_mergesort(
iterator, size - (size/2))
)
def test():
size = 10**3
randomiterator = rlist(size, 0, size)
sortediterator = iterator_mergesort(randomiterator, size)
assert sortediterator == sorted(randomiterator)
if __name__ == '__main__':
test()
基本上,它只是一个适用于迭代器和生成器表达式的归并排序,而不是适用于列表,以便在任何一时刻最小化内存占用。它没什么特别之处,并且使用了内置方法heapq.merge()来合并迭代器,所以当所有东西都崩溃时,我感到非常惊讶。
快速运行代码会出现Segmentation Fault: 11
的错误窗口,告诉我Python已经崩溃了。我不知道该看哪里或者如何调试这个问题,所以任何帮助将不胜感激。