我试图编写一个程序,使用递归对C++(VS2010)中的数组元素进行选择排序。对于较小的数组,当我将数组的大小增加到10000时,该数组的大小小于10,程序可以正常工作,而我正面临stackoverflow异常。我该如何解决这个问题?

到目前为止,谢谢您的回答。我的想法不是对数组进行排序,而是使用递归对大型数组进行排序,并击中stackoverflow异常。本练习背后的主要思想是学习解决堆栈溢出异常的方法,而不是对数组进行排序。

selectionSortRecursive(int a[], int startindex, int endindex)
{
    if (startindex<endindex)
    {
        int s = startindex;
        for (int index=startindex+1;index<endindex;index++)
        {
            if (a[s]>a[index])
                s=index;
        }
        if (s>startindex)
        {
            a[s]=a[startindex]+a[s];
            a[startindex]=a[s]-a[startindex];
            a[s]=a[s]-a[startindex];
        }
        selectionSortRecursive(a, startindex+1, endindex);
    }

}

最佳答案

要么增加堆栈的大小(可以使用STACK链接器选项完成),要么-这是一个更好的选择-改进或替换您的算法。听起来递归算法可能不适合您需要处理的数据类型,但也许您可以通过在每次方法调用中使用较少的局部变量和/或参数来改善性能,以使堆栈框架更小。

关于c++ - 在C++中解决StackOverFlowException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7655217/

10-11 16:30