是否缺少删除未定义的行为? [复制]
Posted
技术标签:
【中文标题】是否缺少删除未定义的行为? [复制]【英文标题】: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:谢谢你的链接,没有找到它是搜索... 【参考方案1】:这不是未定义的行为;这是内存泄漏。
当然,只要进程仍在运行,泄漏就“存在”;在这种情况下,进程立即退出(并且泄漏的概念变得毫无意义)。
【讨论】:
我会说这是未定义的行为,因为程序依赖于调用析构函数的副作用(即,如果不调用程序可能会耗尽内存。)但它不是不是很清楚。 谁对此投了反对票,为什么?我想了解一个陈述是错误的还是什么? (赞成) @juanchopanza:对不起,什么?该程序显然不依赖任何副作用,开始时没有析构函数,因为int[]
不是类类型,内存不足也不是未定义的行为。
抱歉,我脑子里还有a similar, recent question,其中的数组是std::string
之一。以上是关于是否缺少删除未定义的行为? [复制]的主要内容,如果未能解决你的问题,请参考以下文章