Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++ 如果我对数组使用delete p而不是delete[]p,结果会怎样?_C++ - Fatal编程技术网

C++ 如果我对数组使用delete p而不是delete[]p,结果会怎样?

C++ 如果我对数组使用delete p而不是delete[]p,结果会怎样?,c++,C++,可能的重复项: 如果我对数组使用delete p而不是delete[]p,结果会怎样? 这个问题我有两个答案 1只有第一个元素将被释放 这将是一个灾难性的结局 我的问题是,这两种情况如何发生?如果只释放第一个元素,为什么会发生灾难?有人能给我举个例子吗?如果只释放了第一个元素,那么就泄露了数组的其余部分 经过几次迭代后,内存将耗尽 另一方面,如果这是一种未定义的行为,那么灾难性的结局可能是由于有翼恶魔从你的鼻腔喷发而瞬间死亡。你会得到。这是一种未定义的行为 这意味着向内存管理库的编写者提供的标

可能的重复项:

如果我对数组使用delete p而不是delete[]p,结果会怎样? 这个问题我有两个答案

1只有第一个元素将被释放

这将是一个灾难性的结局


我的问题是,这两种情况如何发生?如果只释放第一个元素,为什么会发生灾难?有人能给我举个例子吗?

如果只释放了第一个元素,那么就泄露了数组的其余部分

经过几次迭代后,内存将耗尽


另一方面,如果这是一种未定义的行为,那么灾难性的结局可能是由于有翼恶魔从你的鼻腔喷发而瞬间死亡。

你会得到。

这是一种未定义的行为

这意味着向内存管理库的编写者提供的标准保证是,在这种情况下,存在某些先决条件,即使用delete[]删除数组

如果您打破了这些先决条件,那么内存管理库可能会以某种方式失败。它如何失败将取决于库的实现方式。但是由于C++是为速度设计的,结果可能不太好。因此,通常这意味着内存管理数据结构以某种方式损坏。这可能会导致程序的其他部分出错


如果您在某些编译器上以调试模式构建,它们将使用一个特殊版本的内存管理库,该库设计得更健壮。因此,在这些情况下,您可能不会崩溃,但额外的检查已显式添加到库中,因此速度较慢。但是你仍然不能保证正确的行为。

这是未定义的行为。在这里,人们也曾无数次地问过这个问题。在许多其他人中看到。