2014-02-14 65 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

简短的回答:未定义行为是不确定的。