【问题标题】:Is missing delete undefined behaviour? [duplicate]是否缺少删除未定义的行为? [复制]
【发布时间】:2014-07-30 22:50:55
【问题描述】:

当我分配内存而不调用delete时,这是未定义的行为吗?

例子:

int main(int argc, char** argv) {
    int* a = new int[1];
    // next code only to prevent optimization (hopefully)
    *a = argc; std::cout << *a << std::endl;
    // no delete
    return 0;
}

(让我们假设new 未优化)。

【问题讨论】:

  • 不,这是定义的行为:内存泄漏。由于您的程序随后立即退出,但操作系统仍会回收其所有内存。
  • 优化输出是什么意思?
  • @juanchopanza:谢谢你的链接,没有找到它是搜索...

标签: c++ memory-management language-lawyer


【解决方案1】:

这不是未定义的行为;这是内存泄漏。

当然,只要进程仍在运行,泄漏就“存在”;在这种情况下,进程立即退出(并且泄漏的概念变得毫无意义)。

【讨论】:

  • 我会说这是未定义的行为,因为程序依赖于调用析构函数的副作用(即,如果不调用程序可能会耗尽内存。)但它不是不是很清楚。
  • 谁对此投了反对票,为什么?我想了解一个陈述是错误的还是什么? (赞成)
  • @juanchopanza:对不起,什么?该程序显然不依赖任何副作用,开始时没有析构函数,因为int[] 不是类类型,内存不足也不是未定义的行为。
  • 抱歉,我脑子里还有a similar, recent question,其中的数组是std::string之一。
猜你喜欢
  • 2014-11-02
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2016-09-15
  • 2011-09-04
相关资源
最近更新 更多