C+删除-它删除我的对象,但我仍然可以访问数据?我编写了一个简单的、工作的俄罗斯方块游戏,每个块作为类单块的实例。class SingleBlock{
public:
SingleBlock(int, int);
~SingleBlock();
int x;
int y;
SingleBlock *next;};class MultiBlock{
public:
MultiBlock(int, int);
SingleBlock *c, *d, *e, *f;};SingleBlock::SingleBlock(int a, int b){
x = a;
y = b;}SingleBlock::~SingleBlock(){
x = 222;}MultiBlock::MultiBlock(int a, int b){
c = new SingleBlock (a,b);
d = c->next = new SingleBlock (a+10,b);
e = d->next = new SingleBlock (a+20,b);
f = e->next = new SingleBlock (a+30,b);}我有一个扫描完整行的函数,并在链接的块列表中运行,删除相关的块并重新分配->下一个指针。SingleBlock *deleteBlock;SingleBlock *tempBlock;tempBlock = deleteBlock->next;delete deleteBlock;游戏工作,块被正确删除,所有的功能,它应该是。然而,在检查时,我仍然可以访问随机删除的数据位。如果我在删除后打印每个已删除的单块“x”值,它们中的一些返回随机垃圾(确认删除),有些返回222,告诉我,即使调用析构函数,数据实际上也没有从堆中删除。许多相同的试验表明,它总是相同的特定块,但没有被正确删除。结果:Existing Blocks:Block: 00E927A8Block: 00E94290Block: 00E942B0Block: 00E942D0Block: 00E942F0Block: 00E94500Block: 00E94520Block: 00E94540Block: 00E94560Block: 00E945B0Block: 00E945D0Block: 00E945F0Block: 00E94610Block: 00E94660Block: 00E94680Block: 00E946A0Deleting Blocks:Deleting ... 00E942B0, X = 15288000Deleting ... 00E942D0, X = 15286960Deleting ... 00E94520, X = 15286992Deleting ... 00E94540, X = 15270296Deleting ... 00E94560, X = 222Deleting ... 00E945D0, X = 15270296Deleting ... 00E945F0, X = 222Deleting ... 00E94610, X = 222Deleting ... 00E94660, X = 15270296Deleting ... 00E94680, X = 222是否能够访问预期之外的数据?对不起,如果这是一个长的喘息。
3 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
是否能够访问预期之外的数据?
- 3 回答
- 0 关注
- 449 浏览
添加回答
举报
0/150
提交
取消