flo*_*pex 23 c++ pointers allocation dealloc
int main(){
Employee *e = new Employee();
delete e;
delete e;
...
delete e;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 38
e
这不是一个参考,它是一个指针.如果您通过指针尝试更多一次对象,则会得到未定义的行为delete
.
这意味着从"出现工作"到"崩溃"或完全随机的事情几乎可以发生任何事情.
Dav*_*ley 18
这是未定义的行为,所以任何事情都可能发生.
可能发生的事情很糟糕.通常,免费商店是一个精心管理的免费和分配块系统,new
并delete
进行簿记以使一切处于一致状态.如果delete
再次,系统可能会对无效数据执行相同的簿记,并且突然免费存储处于不一致状态.这被称为"堆损坏".
一旦发生这种情况,任何你做new
或delete
可能有不可预测的结果,包括尝试在应用程序的内存区域外写,静默地破坏数据,错误地认为没有更多的内存,或双重或重叠分配.如果你很幸运,程序很快就会崩溃,尽管你仍然有问题找出原因.如果你运气不好,它会继续运行,结果不好.
Cra*_*rks 12
除了旧的看到"未定义的行为"意味着任何事情都可能发生在从主要内存中开放的第七个通道的网关,实际上在大多数实现中通常会发生的是程序将继续运行删除,然后在某些不相关的内存分配中稍后神秘地崩溃.