按我的理解是不能運行的//錯誤理解
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)