冒泡排序运行出现Stack around the variable ’arr’ was corrupted.arr是我定义的数组


#include <stdio.h>

void bllo(int arr1[], int len)
{

    for (int a = 0; a <= len - 1; a++)
    {

        for (int b = 0; b <= len - 1 - a; b++)
        {
            if (arr1[b] > arr1[b + 1])
            {
                int temp = arr1[b];
                arr1[b] = arr1[b + 1];
                arr1[b + 1] = temp;
            }
        }
    }
}

int main()
{
    int n = 0;
    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
    n = sizeof(arr) / sizeof(arr[0]);
    bllo(arr, n);
    for (int m = 0

不知道怎么回事,运行后是这个

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7787613
  • 以下回答由chatgpt基于相关博客总结生成:

    这个错误通常发生在数组越界访问或者栈溢出的情况下。在你的代码中,问题出现在冒泡排序的内循环中,当b的值等于len - 1 - a时,你尝试访问arr1[b + 1],这对应着数组的越界访问。

    解决方法是将内循环的条件修改为b < len - 1 - a,这样可以避免越界访问。修改后的代码如下:

    #include <stdio.h>
    
    void bubbleSort(int arr1[], int len)
    {
        for (int a = 0; a < len - 1; a++)
        {
            for (int b = 0; b < len - 1 - a; b++)
            {
                if (arr1[b] > arr1[b + 1])
                {
                    int temp = arr1[b];
                    arr1[b] = arr1[b + 1];
                    arr1[b + 1] = temp;
                }
            }
        }
    }
    
    int main()
    {
        int n = 0;
        int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
        n = sizeof(arr) / sizeof(arr[0]);
        bubbleSort(arr, n);
        for (int m = 0; m < n; m++)
        {
            printf("%d ", arr[m]);
        }
        return 0;
    }
    

    这样修改后,运行代码不再会出现 "Stack around the variable 'arr' was corrupted." 的错误。代码正常输出已排序的数组。

    希望对你有所帮助!如果还有其他问题,请随时提问。


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

修改如下,改动处见注释,供参考:

#include <stdio.h>

void bllo(int arr1[], int len)
{

    for (int a = 0; a < len - 1; a++)  //for (int a = 0; a <= len - 1; a++) 修改
    {

        for (int b = 0; b < len - 1 - a; b++)  //for (int b = 0; b <= len - 1 - a; b++) 修改
        {
            if (arr1[b] > arr1[b + 1])
            {
                int temp = arr1[b];
                arr1[b] = arr1[b + 1];
                arr1[b + 1] = temp;
            }
        }
    }
}

int main()
{
    int n = 0;
    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
    n = sizeof(arr) / sizeof(arr[0]);
    bllo(arr, n);
    for (int m = 0; m < n; m++)
        printf("%d ", arr[m]);
    return 0;
}


这个问题你可以试着定义数组的具体大小,你给一个具体数值
而且你的程序里可以加一点优化,比如说n个数只需排n-1轮就可以了