rand()函数在Debug模式中引发了Stackoverflow异常

-2

问题:对包含大量相同元素数组通过快速排序使用一个随机函数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个整数放入这个数组。

在这个条件下,使用快速排序(首先交换了数组头元素和数组中随机一个元素)

  1. Debug模式下,这行代码将会堆栈溢出。
  2. 但是release版本下,不会堆栈溢出,运行非常好。
  3. 将20改为200不会堆栈溢出,经我调整参数,发现数组的range范围,和数组大小在500倍以下Debug不会引发这个异常。

就想在这里请教以下各位,问题总结如下:

  1. 请问为啥Debug模式下快速排序这一步(一开始交换一次数组头元素和其中随机一个元素,是一种优化,rand函数越界)运行会有问题
  2. 请问为啥数组的range范围,和数组大小在500倍以下Debug不会引发这个异常...
  3. 感觉是个比较坑爹的问题,实在解决不了就先算了

在这里先谢谢肯调试的同学了!

源代码见百度云:

链接:https://pan.baidu.com/s/1zJ1K9c5wOVTLmel7fP1TjQ
提取码:adcy

ava
梦之轮回

2019-11-21

你百度网盘的代码太乱了,让别人调试,先把没用的文件删掉么。。快排都有好几个,根本不知道你说的啥 -  慢羊羊  2019-11-26
技术讨论社区