一道c++笔试题求解
struct S
{
int i;
int *p;
};
int main()
{
struct S s;
int *p=&s.i;
p[0]=4;
p[1]=3;
s.p=p;
s.p[1]=1;
s.p[0]=2;
return 0;
}
希望哪位给我解释下这个错误,并说出里面原因,具体点 C++ C 笔试
[解决办法]
指针p指向的是int,不是int数组, p[0]=4; p[1]=3;越界了。后面的s.p同样如此。
[解决办法]
struct S
{
int i;
int *p;
};
int main()
{
struct S s;
int *p=&s.i;
p[0]=4;//s.i = 4
p[1]=3;//s.p = 0x3
s.p=p;//s.p = &s.i
s.p[1]=1;//s.p = 0x1
s.p[0]=2;//把地址为0x1的内存赋值为2。。非法访问。。出错。。
return 0;
}
[解决办法]
楼上回答正确
[解决办法]
还是没看到懂
[解决办法]
s.p这个指针和外面p指针指向同一个地址,而这个时候p的指针指向s.i的地址
s.p[1]=1;// s.p[1]是什么呢,s.p[1]是s.i(这个时候s.p[0]和s.i是同一个地址)后面4个字节的地址,也就是s.p本身。把p的值赋予1,则*p是对地址0x00000001的内存操作。(这么做是很危险的,0x0001的地址是空指针赋值区)
s.p[0]=2;//也就是对刚才地址0x00000001进行赋值,结果相当于对NULL指针赋值2。非法访问。