放置新的奇怪行为[重复]
Posted
技术标签:
【中文标题】放置新的奇怪行为[重复]【英文标题】:strange behavior of placement new [duplicate] 【发布时间】:2014-03-14 10:29:19 【问题描述】: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
但是我把operator new的代码改成了
static void * operator new (size_t,void *p)
return p+1024;
它不会崩溃,它的输出是:
0x25c4010
0x25c4410
10
100
我使用的是 ubuntu13.10 和 gcc4.8.1
谢谢
【问题讨论】:
【参考方案1】:简短的回答:未定义的行为是未定义的。
【讨论】:
以上是关于放置新的奇怪行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章