NULL--print()

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章