请看下面的例子传递一个指针作为参数传递给函数
class Foo{
public:
Foo(int i):x(i){}
int x;
};
void
bar(Foo *p2)
{
delete p2;
p2 = new Foo(2);
}
int
main()
{
Foo *p1 = new Foo(1);
cout<<p1->x;
bar(p1);
cout<<p1->x;
}
据我了解,指针变量都保存在栈上,并包含一个地址在堆上动态分配的内存,它的“指点”至。现在,当我传递一个指向该函数的指针时,第二个指针将在堆栈上创建,指向与第一个指针相同的内存地址。当我删除bar()中的p2并分配新内存时,p1和p2应该指向不同的地址,对吧?
但是,如果我编译此代码,我得到1和2作为输出。这是因为P2设法分配与P1已经指向的相同的存储单元,还是有我错过的东西?
修复这个错误,这个谜将消失。 – 2012-07-14 02:09:31