运行时检测到arr变量附近堆栈溢出了,是为什么?(语言-c++)

img


感觉没有什么地方出错啊。在运行自定义函数的时候,不知道哪里出了问题。

【以下回答由 GPT 生成】

问题原因:代码中的bubble_sort函数使用递归调用,但没有设置递归终止条件,导致堆栈溢出错误。

解决方案:将bubble_sort函数改为使用迭代而不是递归调用。

void bubble_sort(int arr[], int sz) {
    for (int i = 0; i < sz - 1; i++) {
        for (int j = 0; j < sz - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

解释:在原先的代码中,bubble_sort函数使用了递归调用,每次调用都会在堆栈中创建新的函数调用帧,当递归调用的次数较多时,堆栈空间被耗尽,导致堆栈溢出。将递归调用改为迭代调用后,每次循环都会在同一个函数调用帧中执行,避免了堆栈溢出的问题。

更新后的代码不再出现堆栈溢出问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

img