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
#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]