C++ 如何删除int ptr指向的数组

C++ 如何删除int ptr指向的数组,c++,C++,嗨,我有这样的东西: int *p=new int[3]; *p=1; p++; *p=2; delete [] p; 这是删除p指向的数组的正确方法吗?您正在调用数组中间的delete,这是未定义的行为。在这个简单的例子中,您只需要返回到数组的开头 delete [] (p - 1); 您应该调整代码以使用索引 p[0] = 1; p[1] = 2; 或者只是复制一个指针 auto p2 = p; *p2 = 1; ++p2; *p2 = 2; delete [] p; 不,您正在删除

嗨,我有这样的东西:

int *p=new int[3];
*p=1;
p++;
*p=2;
delete [] p;

这是删除p指向的数组的正确方法吗?

您正在调用数组中间的
delete
,这是未定义的行为。在这个简单的例子中,您只需要返回到数组的开头

delete [] (p - 1);
您应该调整代码以使用索引

p[0] = 1;
p[1] = 2;
或者只是复制一个指针

auto p2 = p;
*p2 = 1;
++p2;
*p2 = 2;
delete [] p;

不,您正在
删除
一个您没有
新建的
指针。您已经更改了原始指针的值
new
ed

正确的方法是:

int* p = new int[3];
p[0] = 1;
p[1] = 2;
delete[] p;
在这种情况下,您将保留指向分配内存的原始指针

如果确实需要对指针进行算术运算,则应保存原始值,以便将其传递给
delete[]

int* p = new int[3];
int* orig = p;
*p = 1;
p++;
*p = 2;
delete[] orig;

不,这是未定义的行为。