按我的理解是不能运行的//错误理解
struct Person
{
int x ;
void Fn_1()
{
printf("Person:Fn_1()\n");
}
void Fn_2()
{
x = 10;
printf("Person:Fn_2()%x\n");
}
};
int main(int argc, char* argv[])
{
Person* p = NULL;
p->Fn_1();
p->Fn_2();
return 0;
}
//直接看汇编
其实就是调用函数
默认状态 vc6.0
mov ecx,NULL
call Fn_1
所以Fn_1是正常运行的
再看Fn_2
x= 10 即
mov dword ptr ds:[NULL],0x0A
这里会报一个访问异常
总结:不要被->给骗了, ->函数 ,其实就是多传一个参数,传参的时候并不会对0x000000(非法空间)进行操作,而仅仅将数据压栈,所以不会报错,但是->变量,就是对0x00000000+变量偏移(非法空间)进行操作了,所以会直接报(0xC0000005)