美文网首页Index out of boundsC/C++
实现冒泡排序时又一例数组越界导致的奇妙现象

实现冒泡排序时又一例数组越界导致的奇妙现象

作者: Dumbass | 来源:发表于2017-07-30 02:25 被阅读0次

    代码:

    #include <stdio.h>
    #include "print_int_array.h"
    int main(void)
    {
      int array[10] = {0,4,2,1,6,3,1,5,0,1};
      int cache;
      for(int i=0;i<10;++i)
      {
        for(int k=0;k<10-i;++k) //BUG
        {
          if(array[k] > array[k+1])
          {
            cache = array[k];
            array[k] = array[k+1];
            array[k+1] = cache;
          }
        }
        print_int_array(array,10);
      }
      return 0;
    }
    

    问题在于注释旁的语句,array[k+1]最大时可达array[10],C只保证其合法,并不保证其内容。
    如运行上述程序,会出现时而正常时而崩溃的奇妙现象,总结原因为:
    array[k+1]可能是任意值,若符合 array[k] > array[k+1],直接参与排序过程,造成数组内有11个元素。

    相关文章

      网友评论

        本文标题:实现冒泡排序时又一例数组越界导致的奇妙现象

        本文链接:https://www.haomeiwen.com/subject/qolhlxtx.html