【问题标题】:Stack around Variable a is corrupted变量 a 周围的堆栈已损坏
【发布时间】:2021-03-28 17:35:52
【问题描述】:
#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 中已损坏。在其他一些编译器中,我得到 0 代替10 在编译器中。

【问题讨论】:

  • 第 1 步:将其放入调试器并逐行逐行检查以确保其正常工作。
  • 是的,我做到了,实际上我试图在内部 for 循环中获取 a[10] 的值,该值没有定义,所以错误来了
  • 我们都会犯这样的小错误,所以你能找到它。

标签: arrays c sorting for-loop bubble-sort


【解决方案1】:

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] 中的索引可以等于@ 987654327@ 导致访问数组之外​​的内存。

像这样重写循环

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;
    }
}

【讨论】:

    【解决方案2】:

    您可以根据您的逻辑稍微修改一下这个逻辑。

    #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]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2019-09-04
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多