【问题标题】:Why my program does not crashes when I assign pointer to NULL? [duplicate]为什么当我将指针分配给 NULL 时我的程序不会崩溃? [复制]
【发布时间】:2017-12-25 21:45:35
【问题描述】:

我写了一个非常简单的代码。在动态创建一个对象,然后我删除该对象并将其分配为零。之后我访问该对象的成员函数,但我的程序没有崩溃,而是返回值。

class MyClass
{
public:
    MyClass() {}
    int funct() { return 0; }
};

int main()
{
    MyClass *mc = new MyClass;

    delete mc;
    mc = 0;

    // The program should crash here as I've set mc to zero after deleting 
    // it. But it returns the value.
    int retVal = mc->funct();

    return 0;
}

根据我对 newdelete 和赋值为零的理解,此代码应该会崩溃或给出异常。

【问题讨论】:

  • 未定义的行为不会导致崩溃。

标签: c++


【解决方案1】:

您可以将您的方法可视化为一个函数:

int funct(MyClass *this) { return 0; }

可以看到该函数根本没有使用this,所以如果为0也不会崩溃。

但是,不要在实际代码中做这样的事情。这仍然是一个未定义的行为,编译器优化可能会搞砸。

【讨论】:

  • 很好的解释。
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2013-08-30
  • 2019-04-18
  • 1970-01-01
  • 2016-08-21
相关资源
最近更新 更多