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指针的地址,将此地址内容置为1s.p[0] = 2; //s.p成员p目前的值为1,导致非法访问异常}