为了账号安全,请及时绑定邮箱和手机立即绑定

C+删除-它删除我的对象,但我仍然可以访问数据?

C+删除-它删除我的对象,但我仍然可以访问数据?

C++ C
翻翻过去那场雪 2019-06-04 17:01:59
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贡献1821条经验 获得超4个赞

是否能够访问预期之外的数据?

这在技术上被称为未定义的行为。如果它也给你一罐啤酒,也不要感到惊讶。


查看完整回答
反对 回复 2019-06-04
?
呼唤远方

TA贡献1856条经验 获得超11个赞

是否能够访问预期之外的数据?

在大多数情况下,是的。调用DELETE并不会使内存为零。

请注意,未定义行为。使用某些编译器,可以对内存进行零化。当您调用DELETE时,所发生的情况是内存被标记为可用,所以下次有人这样做时新的,可以使用内存。

如果考虑到这一点,这是合乎逻辑的-当您告诉编译器您不再对内存感兴趣时(使用删除),为什么计算机要花时间对其进行归零。


查看完整回答
反对 回复 2019-06-04
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这就是C+所称的未定义行为-您可能能够访问数据,但可能无法访问。无论如何,这是错误的做法。


查看完整回答
反对 回复 2019-06-04
  • 3 回答
  • 0 关注
  • 449 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信