c++ - 为什么两次删除指针会导致崩溃?

标签 c++

<分区>

Possible Duplicate:
Why Free crashes when called twice

我只想知道当我们删除已经被删除的指针时到底发生了什么,是什么原因导致崩溃的?

最佳答案

很难准确预测会发生什么——这在一定程度上取决于编译器,而在很大程度上取决于标准库。正式来说,这只是未定义的行为,所以几乎任何事情都有可能发生。

最常见的情况是堆会被丢弃。它可能不会检查删除的内容是否有效,因此当它在同一地址获得两个 block 时,它可能(例如)仍将它们视为两个单独的 block ,因此当您稍后分配内存时,您可能会两次获得相同的内存块。在某些其他情况下,它可能(例如)只是补充一点来说明该内存块是否正在使用,所以第二次删除它时,实际上最终将其标记为再次使用,这样内存就可以永远不会再分配,你基本上只是造成了泄漏。

关于c++ - 为什么两次删除指针会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752057/

相关文章:

c++ - 返回指向常量 getter 的指针时,返回值类型与函数类型不匹配

c++ - 一元 * 运算符的操作数是否期望纯右值

c++ - 这种递归的汉诺塔算法是一种不知情的搜索吗?

c++ - Eigen 张量编译错误

c++ - 静态内联函数中的局部函数静态对象不共享

c++ - int main(void) 在 C++ 中有效吗?

python - 链接到 VS2010 c++ 中特定位置的 dll

c++ - boost 错误 : not found boost_date_time-vc80-mt-1_41. dll

c++ - void* 和 char* 的区别

c++ - XPCOM C++ : Does it support RegExps?