访问异常地址空间

1、堆栈从上到下依次递增,函数参数及结构体内容压栈采用倒序,局部变量压栈顺序正常,所以导致访问系统内存。

2、全局变量和malloc在堆上需要手动处理。

 

struct   S   {
int   i;
int   *   p;
};

void   main()
{
S   s;                             //1
int   *   p   =   &s.i;       //2
p[0]   =   4;                   //3
p[1]   =   3;                   //4
s.p   =   p;                     //p的地址就是s的地址,将p的地址赋值给s.p成员
s.p[1]   =   1;               //s.p成员为p指针的地址,将此地址内容置为1
s.p[0]   =   2;               //s.p成员p目前的值为1,导致非法访问异常
}

你可能感兴趣的:(struct)