#include "stdafx.h"
int main(int argc, char* argv[])
{
struct st
{
int i;
int *p;
};
struct st s;
int *p = &s.i;//第1行
p[0] = 1;
p[2] = 2;
s.p = p;
s.p[1] = 3;
s.p[0] = 4;
printf("Hello World!\n");
getchar();
return 0;
int main(int argc, char* argv[])
{
struct st
{
int i;
int *p;
};
struct st s;
int *p = &s.i;//第1行
p[0] = 1;
p[2] = 2;
s.p = p;
s.p[1] = 3;
s.p[0] = 4;
printf("Hello World!\n");
getchar();
return 0;
}
个人判断第5行崩溃。
测试结果:
VC++6.0上为执行到第6行崩溃。
linux上为执行第5行时崩溃。
分析:
第一行将结构体对象首地址赋值给指针p。不出错。
第二行对结构体中i赋值为1。
第三行对结构体中*p赋值为2。
第四行对结构体中p赋值为i的地址。
第五行对结构体中p赋值为3。这里是对p地址赋值。赋值为3。
第六行对结构体中p[0]赋值为4。即修改p指向内容为4。但p = 3为非法地址。
可以得出Windows上不能非法修改非法地址内容。
linux上不能将指针指向非法地址。