2014-02-14 64 views
0
class A 
{ 
    public: 
     static void * operator new (size_t,void *p) 
     {               
      return p; 
     } 
     int i; 
}; 


int main() 
{ 
    void *p = malloc(sizeof(A)); 
    cout<<p<<endl; 
    A *a= new (p) A; 
    a->i = 10; 
    cout<<a<<endl; 
    cout<<a->i<<endl; 
    a->i = 100; 
    cout<<a->i<<endl; 
} 

輸出:奇怪放置新的行爲

0x1e0e010 
0x1e0e010 
10 
100 

但我運營商新的代碼更改

static void * operator new (size_t,void *p) 
{               
    return p+1024; 
} 

它不會崩潰,其輸出是:

0x25c4010 
0x25c4410 
10 
100 

I現在用ubuntu13.10和gcc4.8.1

感謝

回答

4

簡短的回答:未定義行爲是不確定的。