问题标签 [delete-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
18191 浏览

c++ - 为什么我的堆损坏了?

我收到一个错误 - 堆损坏,不知道为什么。

我的基地:

H:

cp:

军队破坏者:

我究竟做错了什么?

0 投票
2 回答
1157 浏览

c++ - C++ 中删除的行为

我正在处理一些奇怪的代码,对我来说它不是很好的代码。

这里 PIP_ADAPTER_INFO 是指向 struct IP_IP_ADAPTER_INFO 的指针,IP_IP_ADAPTER_INFO 的大小是 640。

我期待在 delete []pAdapterInfo 调用中崩溃。但是没有崩溃。我写了一个小测试代码。

我所看到的 :

  1. 如果我取消注释 c'tor 和 d'tor,测试代码会崩溃(断言失败)
  2. 如果我保留它的评论,一切都会失败。

即使我看到 disassemble ,在上述两种情况下也是不同的

请用你的专业知识帮助我学习 C++ 的这个特性。

提前致谢。

星期六

0 投票
11 回答
4658 浏览

c++ - 使用重载删除删除对象之前的 NULL 检查

这是代码审查评论之一。

在为任何对象调用 delete 之前检查 NULL 是个好主意吗?

我确实理解 delete 运算符在内部检查 NULL 并且是多余的,但提出的参数是 delete,因为运算符可以重载,如果重载版本不检查 NULL,它可能会崩溃。那么假设删除是否以及何时重载是否会检查NULL是否安全合理?在我的理解中,假设第一种情况是重载的删除应该处理 NULL 检查,并且审查点不成立是合理的。你怎么看?

0 投票
3 回答
2786 浏览

c++ - 为什么 C++ 删除运算符不将指针设置为 NULL?

可能重复:
为什么不删除将指针设置为 NULL?

指向已释放内存的指针有什么目的吗?

0 投票
3 回答
748 浏览

c++ - 在删除之前在 C++ 中测试 void 指针

我在 C++ 中有一个数组:

它在它所在的类的构造函数中初始化。

在析构函数中我有:

除了通过 Valgrind 测试程序时,它说有一些删除 void 指针的调用:

我想在调用 delete 之前测试 playerArray 是否为空指针以避免此错误。

有谁知道如何做到这一点?

0 投票
8 回答
5027 浏览

c++ - 如何安全地删除多个指针

我有一些代码使用大量指向同一地址的指针。给定一个等效的简单示例:

如何在不多次删除的情况下安全删除它?如果我有很多指针都指向同一个地址的对象,这尤其困难。

0 投票
5 回答
630 浏览

c++ - 多个对象指向的内存的多次C++删除

另一个 C++ 指针删除问题在以下示例中:

为什么调用“delete f1”时没有出错?我不是两次删除了同一个地址(*p)吗?

如果我直接删除最后两行代码中的指针,我会得到错误。

0 投票
1 回答
660 浏览

c++ - 删除表达式

参考这里

该析构函数还将隐式调用 auto_ptr 对象的析构函数。这将删除它持有的指针,该指针指向 C 对象 - 不知道 C 的定义!这出现在 .cpp 文件中,其中定义了 struct A 的构造函数。

这很好奇,然后

5.3.5/5 状态 - “如果要删除的对象在删除点具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,则行为未定义。”

我的问题是,为什么这样一个试图删除指向不完整类型的指针的程序不被视为格式错误?为什么它被推到有条件的领域(并且完整的类有一个非平凡的析构函数..)“未定义的行为”?

“和”是什么意思?

编辑2:

下面的代码格式正确吗?VS 和 Gcc/CLang 编译,但 Comeau 给出警告。我想这一切都是标准中提到的未定义行为的一部分。我的问题是'为什么这不是格式错误但未定义'?

0 投票
3 回答
2558 浏览

c++ - 面向对象自杀或删除此;

下面用MSVC9.0编译的代码运行四次,输出Destructor ,符合逻辑。

我认为 main 中的前 4 行代码不会导致未定义的行为(尽管对此并不完全确定delete this;)。我想要一个确认或< 确认反义词的占位符 >。但是我对第 5 行和第 6 行有严重的怀疑。允许显式调用析构函数,不是吗?但是在那之后对象的生命周期是否已经结束?也就是说,在显式调用析构函数之后调用另一个成员是否允许(定义)?

总而言之,上述代码的哪些部分(如果有)会导致未定义的行为(从技术上讲)?

0 投票
10 回答
1875 浏览

c++ - 检测“新”项目何时被删除

考虑这个程序:

我原以为会发生崩溃,但结果却发生了:

你好
再见
我说!

我猜这是因为当内存被标记为已释放时,它并没有被物理擦除,并且由于代码直接引用它,所以仍然可以在那里找到对象,完全完好无损。在调用之前进行的分配Speak()越多,崩溃的可能性就越大。

不管是什么原因,这对于我的实际线程代码来说都是一个问题。鉴于上述情况,我如何可靠地判断另一个线程是否删除了当前线程想要访问的对象?