【发布时间】:2011-12-11 06:24:38
【问题描述】:
我真的不明白为什么这些指针可以访问......任何帮助表示赞赏
#include <iostream>
class Wicked{
public:
Wicked() {};
virtual ~Wicked() {};
int a;
int b;
};
class Test
{
public:
Test() {};
virtual ~Test() {};
int c;
Wicked * TestFunc()
{
Wicked * z;
c = 9;
z = new Wicked;
z->a = 1;
z->b = 5;
return z;
};
};
int main()
{
Wicked *z;
Test *t = new Test();
z = t->TestFunc();
delete z;
delete t;
// why can I set 'z' when pointer is already destroyed?
z->a = 10;
// why does z->a print 10?
std::cout << z->a << std::endl;
// why does t->c exist and print correct value?
std::cout << t->c << std::endl;
//------------------------------------------------------
int * p = new int;
*p = 4;
// this prints '4' as expected
std::cout << *p << std::endl;
delete p;
// this prints memory address as expected
std::cout << *p << std::endl;
return 0;
}
【问题讨论】:
-
我不太明白这是什么问题。
-
除非你改写你的问题,否则我猜它很快就会关闭。
-
删除'z'和't'指针后,它们仍然打印值
-
OP 询问如何在删除指针后获得旧值,即内存是可访问的。我认为这个问题没有问题