问题:对包含大量相同元素数组通过快速排序使用一个随机函数rand()引发堆栈溢出
操作系统:Win 10
IDE:Visual studio 2017
问题背景:
我在SortTestHelper.h中定义了一个函数叫做generateRandomArray(int n, int rangeL, int rangeR)
描述如下:
/*
@Comments:生成有n个元素的随机int数组,每个元素的随机范围为[rangeL,rangeR]
@Param n : 数组大小
@Param rangeL : 数组左边界
@Param rangeR : 数组右边界
@Return int*
*/
我想生成大量包含重复元素的int型整数数组,就在main.cpp中测试3中,写了如下代码
意思就是,在【0,20】这个范围内产生100000个整数放入这个数组。
在这个条件下,使用快速排序(首先交换了数组头元素和数组中随机一个元素)
- Debug模式下,这行代码将会堆栈溢出。
- 但是release版本下,不会堆栈溢出,运行非常好。
- 将20改为200不会堆栈溢出,经我调整参数,发现数组的range范围,和数组大小在500倍以下Debug不会引发这个异常。
就想在这里请教以下各位,问题总结如下:
- 请问为啥Debug模式下快速排序这一步(一开始交换一次数组头元素和其中随机一个元素,是一种优化,rand函数越界)运行会有问题
- 请问为啥数组的range范围,和数组大小在500倍以下Debug不会引发这个异常...
- 感觉是个比较坑爹的问题,实在解决不了就先算了
在这里先谢谢肯调试的同学了!
源代码见百度云:
链接:https://pan.baidu.com/s/1zJ1K9c5wOVTLmel7fP1TjQ
提取码:adcy