Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;运行时错误,快速排序算法引发堆栈转储错误_C++_Sorting_Quicksort - Fatal编程技术网

C++ C++;运行时错误,快速排序算法引发堆栈转储错误

C++ C++;运行时错误,快速排序算法引发堆栈转储错误,c++,sorting,quicksort,C++,Sorting,Quicksort,当我尝试size=20000时,代码工作正常,而当我尝试size=50000时,代码似乎失败,这给了我以下错误: 2[]CPPU应用程序_4 7628 cygwin_异常::打开_stackdumpfile:将堆栈跟踪转储到CPPU应用程序_4.exe.stackdump long-long比较;//用于计数比较 长期掉期;//用于计算掉期 布尔数小于(整数n1,整数n2){ ++比较; 返回n1=j) { 无计数(努斯,努斯); 打破 } 其他的 { 无计数(努斯,努斯); } 互换(*i,*

当我尝试size=20000时,代码工作正常,而当我尝试size=50000时,代码似乎失败,这给了我以下错误:

2[]CPPU应用程序_4 7628 cygwin_异常::打开_stackdumpfile:将堆栈跟踪转储到CPPU应用程序_4.exe.stackdump

long-long比较;//用于计数比较
长期掉期;//用于计算掉期
布尔数小于(整数n1,整数n2){
++比较;
返回n1=*轴和&j>开始){
无计数(努斯,努斯);
无计数(努斯,努斯);
--j;
}
无计数(努斯,努斯);
无计数(努斯,努斯);
//跳过右侧的“高”
如果(i>=j)
{
无计数(努斯,努斯);
打破
}
其他的
{
无计数(努斯,努斯);
}
互换(*i,*j);
已计数的交换(努斯,努斯);//交换不合适的项目
}
掉期(*(停止-1),*i);
计数的交换(努斯,努斯);//将轴交换到最后的位置i
返回i;
}
无效快速排序(int*开始,int*停止){
int noUse=99;
如果(开始>=停止){
无计数(努斯,努斯);
返回;
}
其他的
{
无计数(努斯,努斯);
}
int*pivot=分区(开始、停止);
快速排序(开始、轴心);
快速排序((枢轴+1),停止);
}
int main()
{
int size=20000;
整数*数据=新整数[大小];
对于(int i=0;i

我认为这个错误意味着我超过了数据类型存储限制,我认为问题在于我使用int,所以我将所有int都改为long-long,但仍然没有解决它。根据代码的逻辑,我认为我们没有改变数组的大小。所以我不确定是什么导致了这个错误

您可能会遇到堆栈溢出。这就是递归不好的原因

作为临时解决方法,请尝试通过链接
--stack 16777216
来增加堆栈大小:

$g++-Wl,--stack,16777216。
==编辑==

此外,在
(end-1)
处选择轴也不好。试着在中间设置枢轴。

    int* pivot = (stop - start)/sizeof(int*)/2 + start;

操作员
new
可以抛出
std::bad\u alloc
,检查您的情况是否存在问题。此外,您还可以使用调试符号编译程序而无需优化,并调查堆栈跟踪-它将指向程序崩溃的地方。您是否获得了
计数较少的
?奇怪的是,你用垃圾调用它,每次都忽略它的返回值,我希望它像
if(!counted_less(start,stop))return那样使用
while(计数小于(*i,*pivot)和计数小于(*i,stop))++i
@Caleth yea我本来应该这样做的,但我很懒,就是这样做的instead@glockm15如果我给这个作业打分,你会得到0分。当我运行它时,它看起来像是在病态的坏枢轴案例中抱歉,我不太擅长这种编程,我在哪里使用这些代码来增加堆栈大小?这取决于您如何运行编译和运行代码。您使用什么工具来实现这一点?只是netbeansApplication堆栈大小有一个限制,它与您的PC内存无关,但要小得多。在Windows上,默认值为1MB。如果您需要更多的堆栈,您可以增加它,这就是链接器选项所做的。
    int* pivot = (stop - start)/sizeof(int*)/2 + start;