Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否缺少删除未定义的行为?_C++_Memory Management_Language Lawyer - Fatal编程技术网

C++ 是否缺少删除未定义的行为?

C++ 是否缺少删除未定义的行为?,c++,memory-management,language-lawyer,C++,Memory Management,Language Lawyer,当我分配内存而不调用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; } 让我们假设新的行

当我分配内存而不调用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;
}

让我们假设新的行为没有被优化。

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


当然,只有在流程仍在运行时,泄漏才会存在;在这种情况下,进程退出,泄漏的概念随后立即变得毫无意义。

否,这是定义的行为:内存泄漏。既然你的程序马上退出,操作系统仍然会回收所有内存。你说的优化是什么意思?@juanchopanza:谢谢你的链接,没有发现是搜索…我认为这是未定义的行为,由于该程序依赖于调用析构函数的副作用,即如果不调用该程序,该程序可能会耗尽内存。但这并不十分清楚。谁否决了这一点,为什么?我想知道一句话是不是错了?upvoted@juanchopanza对不起,什么?程序显然不依赖任何副作用,没有析构函数,因为int[]不是类类型,而且内存不足也不是未定义的行为。对不起,我脑子里仍然有一个数组,数组是std::string的一个。