变量 a 周围的堆栈已损坏

Stack around Variable a is corrupted

#include<stdio.h>

int main(void)
{
    int array[10] = { 10,2,9,4,5,6,7,8,3,1 };
    /*Implementing Bubble Sort */
    int temp;
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 10 - i; j++)
        {
            if (array[j] > array[j + 1])
            {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", array[i]);
    }
}

当我尝试 运行 程序时,我正在对值进行排序,但一个值有一些垃圾值,并且对话框显示变量周围的堆栈在 VS 2019 中已损坏。在其他一些编译器中我' m 在编译器中用 0 代替 10。

内部for.loop

for (int j = 0; j < 10 - i; j++)
{
    if (array[j] > array[j + 1])
    {
        temp = array[j];
        array[j] = array[j + 1];
        array[j + 1] = temp;
    }
}

调用未定义的行为,因为当 j 等于 9 时外循环的第一次迭代,即当 i 等于 0 中的索引表达式 array[j + 1] 可以等于 10,这会导致访问数组以外的内存。

像这样重写循环

for (int j = 1; j < 10 - i; j++)
{
    if (array[j-1] > array[j])
    {
        temp = array[j-1];
        array[j-1] = array[j];
        array[j] = temp;
    }
}

你可以根据你的逻辑稍微编辑一下这个逻辑吗?

#include<stdio.h>

int main(void)
{
    int array[10] = { 10,2,9,4,5,6,7,8,3,1 };
    /*Implementing Bubble Sort */
    int temp;
    for (int i = 0; i < 10; i++)
    {
        for (int j = i; j < 10; j++)
        {
            if (array[i] > array[j])
            {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", array[i]);
    }
}