在C++中调用数组时删除操作员行为?

Dig*_*til 0 c++ visual-c++

我有以下代码行.

代码示例1

char * arr = new char[10];
arr++;
delete arr;
Run Code Online (Sandbox Code Playgroud)

代码示例2

char * arr = new char[10];
delete arr;
Run Code Online (Sandbox Code Playgroud)

我有两个示例代码.代码示例1在删除时崩溃,而代码示例2工作正常.arr ++只有一个区别.这两个代码示例究竟发生了什么.谁能解释一下?

wal*_*lly 7

无法删除单个元素,因为delete必须使用它来删除已分配的相同内存.

它正在崩溃,因为new返回的指针必须与用于调用的指针相同delete.

增加指针并使用它意味着程序不再看到其他簿记信息(可能存储在new返回的指针之前)

此外,您应该使用delete[]删除数组.因此,以下是未定义的行为:

char * arr = new char[10];
delete arr;
Run Code Online (Sandbox Code Playgroud)

它应该是:

char * arr = new char[10];
delete[] arr;
Run Code Online (Sandbox Code Playgroud)