下面哪段代码会使程序产生crash,为什么?谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/30 23:26:56
struct S
{
int i;
int *p;
};
struct S s;
int *p = &s.i;
p[ 0] =1;
p[ 1] =2;
s.p = p;
s.p[ 1] =3;
s.p[ 0] =4;

请给出理由,谢谢!

最后一句.
int *p=&s.i;//p指向s.i
p[0]=1;//将s.i赋1
p[1]=2;//实际上是将s.p赋2
s.p=p;//将s.p赋了s.i的地址
s.p[1]=3;//实际上是将s.p赋了3
s.p[0]=4;//上一步将s.p赋了3,而地址3的空间肯定是程序中受保护的空间,出错.

你的结构体中的变量i不是数组
而你却在后面中把它当作数组处理(p[0]和p[1]);
改错的方法是把变量i改为i[2];
这样肯定会好!!!
谢谢!