我有以下代码行.
代码示例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 ++只有一个区别.这两个代码示例究竟发生了什么.谁能解释一下?
无法删除单个元素,因为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)