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;
不,这是未定义的行为。