墨竹墨律 发表于 2020-11-16 19:02:48

Ubuntu下的C程序,运行同一个可执行文件,为什么会出现不一样的结果


代码
#include<stdio.h>
int main()
{
      int a={1,4,22,4,1,55,9,1,2,53};
      int i,j;
      for(i=0;i<sizeof(a)/sizeof(int);i++)
      {
                printf("%d\n",a);
      }
      for(i=0;i<10;i++)
      {
                for(j=0;j<10-i;j++)
                {       if(a>a)
                        {
                              int t=a;
                              a=a;
                              a=t;
                        }
                }
      }
      for(i=0;i<sizeof(a)/sizeof(int);i++)
      {
                printf("%d\t",a);
      }
      printf("\n");
      return 0;
}
~      

对一个数组进行两次输出,一个是未处理前,第二个是经过冒泡排序后,多次运行生成的可执行文件会为什么出现不同的结果


./array03                                        第一次运行结果
1       
4
22
4
1
55
9
1
2
53
-621205760      1       1       1       2       4       4       9       22      53
*** stack smashing detected ***: terminated
Aborted (core dumped)



./array03                        第二次运行结果
1
4
22
4
1
55
9
1
2
53
1       1       1       2       4       4       9       22      53      55

xieglt 发表于 2020-11-17 10:15:55

#include<stdio.h>
int main()
{
        int a={1,4,22,4,1,55,9,1,2,53};
        int i,j;
        for(i=0;i<sizeof(a)/sizeof(int);i++)
        {
                printf("%d\n",a);
        }
        for(i=0;i<10;i++)
        {
                //这里的循环结束条件是10-i-1
                //如果循环结束条件设置为10-i的话,当i=0时
                //循环为for(j=0;j<10;j++)
                //那么循环到 j = 9时 a 就会访问到a,而a已经数组越界了
                //a是个不确定的值,所以会出现不同结果。
                for(j=0;j<10-i-1;j++)
                {      
                        if(a>a)
                        {
                                int t=a;
                                a=a;
                                a=t;
                        }
                }
        }
        for(i=0;i<sizeof(a)/sizeof(int);i++)
        {
                printf("%d\t",a);
        }
        printf("\n");
        return 0;
}
页: [1]
查看完整版本: Ubuntu下的C程序,运行同一个可执行文件,为什么会出现不一样的结果