c++ - 删除从另一个指针分配的指针,我应该再次删除另一个吗?

标签 c++ pointers

所以,这是我的例子来解释这个问题

void * p1;
int * p2, * p3;

p2 = new int;
p1 = p2;
p3 = (int *) p1;

释放内存,下面3行是否等价?

delete p2;
delete p3;
delete (int *) p1;

我使用它的原因是我想在不知道其类型的情况下在函数之间传递一个指针,例如我定义了一个 void 指针并通过如下调用其他函数来更改其值:

void * p1;
func1(p1); //in this function, p2 = new int and  p1 is assigned as p1 = p2;
func2(p1); //in this function, p1 is assigned to another pointer: int * p3 = (int *)p1;

然后调用func3释放内存

func3(p1); //delete int * p1

调用func3后,我还需要处理func1中的p2吗?

谢谢!

最佳答案

是的,所有 3 个 delete 都是等价的。重要的是要注意,在发布的示例中,所有 3 个指针都指向同一事物。这意味着如果您删除其中一个,您不应该删除其他的,因为它们指向的内存已经被释放。

如果您确实尝试删除 已经发布的内容,您将引发未定义行为。如果幸运的话,您的程序会崩溃,但任何事情都有可能发生。

关于c++ - 删除从另一个指针分配的指针,我应该再次删除另一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259305/

相关文章:

c++ - 用一些字符串替换字符串中的字符

c++ - 将时间转换为分钟和秒

c++ - 将字符地址存储到整数指针

c - 如何使用数组下标运算符将结构体中的成员地址传递给 `scanf` ?

c++ - 调用 C++ 构造函数问题

c++ - 如果运算符是常量,运算符 << 重载通常会失败?

c++ - Boost.Build/bjam 和 Qt

复制结构的组件会删除同一结构的另一个组件

c++ - 复制并取消 int 数组

c - 分配给类型时不兼容的类型 - C