动态指针赋值c++

Dynamic pointer assignment c++

本文关键字:c++ 赋值 指针 动态      更新时间:2023-10-16

2。给定定义,

int *p1, *p2;
p1 = new int;
p2 = new int;

以下两项作业有什么区别。

a) p1 = p2;
b) *p1 = *p2 

你忘了提到语言,但我猜你指的是C或C++。

a) 简单的地址分段。CCD_ 1将是指向CCD_ 2的指针。因此,您最终会有两个指针指向int的一个实例。这意味着,您通过覆盖p1来释放它的指针,但它的无形部分将留在内存中未被释放,您将无法释放它,甚至无法访问它!(如果你没有在其他地方复制p1…)用valgrind看看。然而,当您调用delete p1时,您可以释放由p2指向的偶数int。p2的任何使用都可能导致分割错误。

b) 您将p2的值分配给p1,这意味着您最终会得到两个动态分配的指针,这两个指针的值都是p2。但它们将是int的两个不同的独立实例!因此,如果您delete p1p2仍然可以访问。

a)您将p2(这是一个地址)分配给p1。因此,当您取消引用p1时,您将获得与*p2相同的值。如果你改变了*p2,那么*p1也会改变。所以基本上,在这种类型的赋值中,p1和p2都指向相同的地址位置。然而,这将产生内存泄漏,因为分配给p1的地址不再被引用。

b) 在这种情况下,*p2中的值被指定给*p1。但他们仍然指向不同的地址位置。如果在指定后更改*p2的值,则不会更改*p1。