c++ - 断言两个指针都指向 NULL 在 delete() 之后没有发生

标签 c++ struct assert

给定这段代码:

#include <iostream>
#include <assert.h>
using namespace std;


struct Foo
{
    // something
};


int main()
{

    Foo *p1 = new Foo;
    Foo * p2 = p1;
    assert(NULL != p1);
    delete p1;
    p1 = NULL;

    assert(NULL != p2);
    delete p2;

    cout << "everything is cool!" << endl;

    return 0;
}

当我删除 p1 时,第二个断言 (assert(NULL != p2);) 没有失败,为什么?

输出:一切正常!

那为什么 p2 的断言没有失败呢?

最佳答案

When I delete p1 , the second assert (assert(NULL != p2);) is not failing , why ?

删除 p1 或分配给它对 p2 本身没有影响。删除 p1 后,p2 仍指向该地址,即指向已失效的对象。它变成了所谓的悬挂指针。当然,访问它或删除它(您正在做的)是未定义的行为。

关于c++ - 断言两个指针都指向 NULL 在 delete() 之后没有发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122338/

相关文章:

c++ - move 语义和引用语义

c++ - 使用 C++ 将 UDP 数据包存储在结构中

postgresql - 将 ASSERT 与 PostgreSQL 结合使用的示例

java - 如何将 Java 断言和 (JUnit) 测试结合起来进行公共(public)后置条件?

Java Assert Double 是 NaN

c++ - 使用 boost multiprecision/mpfr float - string could not be interpreted as valid integer 错误

c# - 使用 C# 从 RLM 读取许可文件(C++ 到 C# 的翻译)

c++ - 将函数指针赋值给函数指针

c - 关于C上struct的算法

struct - NSObject 和 Struct 的区别