- #include <iostream>
-
#define OK 0
-
#include <stdlib.h>
-
using namespace std;
-
struct S {
-
int i;
-
int * p;
-
};
-
-
int main( ){
-
S s;
-
int *ptr=&s.i;
-
-
ptr[0]=4;
-
ptr[1]=3;
-
-
s.p=ptr;
-
-
s.p[1]=0xf1;
-
-
s.p[0]=2;
-
return OK;
-
}
程序有点绕,值得好好考虑,对指针的理解还是可以的。
运程的运行结果是崩溃,提示试图访问内存地址0x0000000f1
同时还需要注意压栈的方向,从高地址向低地址扩展,
在s.p[1]=0xf1;赋值时,s.p把自身存储的地址值修改成了0xf1,把ptr地址给覆盖掉了,在下一步进行赋值时,相当于访问一个常量地址,让后将其赋值为2因而地址访问越界。
阅读(822) | 评论(0) | 转发(0) |