如下代码,在VS2015中运行
int main()
{
int s = 10, j = 11;
int *p = &s;
*(p + 1) = j;
cout << p << endl << p[0] << endl<< p[1] << endl;
system("pause");
}
运行结果
运行后报错
报错信息是变量s栈越界,来看看地址。
int main()
{
int s = 10, j = 11;
int *p = &s;
*(p + 1) = j;
cout << p << endl;
cout << p + 1 << endl;
cout << &j << endl;
cout << p << endl << p[0] << endl<< p[1] << endl;
system("pause");
}
结果
结论
可以看到p+1的地址并不是j的地址,而是在为s开辟的地址的下一个位置。而分配给s的空间只有四位,所以越界。p+1未被声明,访问的是一个本不存在的位置上的本不存在的数据。