首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中解析StackOverFlowException

在C++中解析StackOverFlowException
EN

Stack Overflow用户
提问于 2011-10-05 07:36:08
回答 3查看 6.9K关注 0票数 1

我正在尝试编写一个程序来使用递归对C++ (VS2010)中的数组元素进行选择排序。对于较小的数组,当我将数组的大小增加到10000时,如果数组的大小小于10,则会遇到堆栈溢出异常。我该如何解决这个问题呢?

谢谢你到目前为止的答案。我的想法不是对数组进行排序,而是使用递归和命中堆栈溢出异常来对大型数组进行排序。我这个练习背后的主要想法是学习解决堆栈溢出异常的方法,而不是对数组进行排序。

代码语言:javascript
复制
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);
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-05 07:39:38

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

票数 4
EN

Stack Overflow用户

发布于 2011-10-05 07:42:48

你要么使用了大量的本地存储空间,要么你的递归算法会在后续调用中导致内存使用量激增。在任何一种情况下,迭代解决方案都可能解决您的问题。

票数 2
EN

Stack Overflow用户

发布于 2011-10-05 07:41:43

正如您可能知道的,局部变量保存在堆栈中。

当函数递归时,每次调用的局部变量都会一直保留在堆栈中,直到它们各自的函数执行为止。如果递归太多,堆积将会太大,很可能会出现堆栈溢出异常,就像你正在得到的那样,或者是分段错误,堆栈溢出到受保护的内存中。

这是最基本的,除了增加可用内存或将函数重写为迭代外,没有其他方法可以绕过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7655217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档