69,382
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int xn(int *x,int *m);
int main()
{
int n=10, i;
int nx[10], *p, *z;
for(i = 0; i < n; i++)
{
nx[i] = i + 1;
printf("%3d", nx[i]);
}
printf("\n");
p = nx;
z = &nx[i-1]; /* replace i with i-1, i has overflowed.*/
printf("%5d\n", xn(p, z));
return 0;
}
int xn(int *x, int *m)
{
int i = 1, j, y;
int *a;
a = x;
for(j = 0; x != m; x++)
{
j++;
}
x = a;
do
{
if(i == 3)
{
y = *x;
*x = 0;
j--;
i = 0;
printf("i = %d, *x = %d\n", i, *x);
}
else
{
i++;
x++;
if(x > m)
x=a;
while(*x == 0) /*del ;*/
{
x++;
}
printf("+++i = %d, *x = %d\n", i, *x);
}
} while(j != 1);
printf("\n");
return *x;
}
不是i为1的语句体里执行了,而是i确实等于了3才执行了。
另外,提出2点问题:
1. main函数里,z = &xn[i]其实数据已经越界了,因为i 的下标范围是0~9,经过循环后i是10了,所以越界;
2. xn函数里有while(*x == 0);去掉后面的分号;
最后提一点,注意coding style.