动态指针赋值c++
Dynamic pointer assignment c++
2。
根据定义,
int *p1, *p2;
p1 = new int;
p2 = new int;
下面两个赋值有什么区别。
a) p1 = p2;
b) *p1 = *p2
a) 当您取消引用 p1 时,您将 p2(这是一个地址)分配给 p1.So,您将获得与 *p2 相同的值。如果你改变 *p2 而不是 *p1 基本上也会 change.So ,在这种类型的赋值中 p1 和 p2 都引用相同的地址 location.This 会产生内存泄漏,因为分配给 p1 的地址是不再引用。
b) 在这种情况下,*p2 中的值被分配给*p1。但他们仍然指向不同的地址位置。如果在分配后更改 *p2 的值,它不会更改 *p1.
你忘了说语言,但我猜你指的是 C 还是 C++。
a) 简单的地址分配。 p1
将指向 p2
。所以你最终得到两个指向一个 int 实例的指针。这意味着,您通过覆盖它来释放指向 p1 的指针,但它的实例将保留在内存中 unfreed 并且您将无法释放它甚至无法访问它! (如果您没有在其他地方复制 p1
...)使用 valgrind 来查看。但是,当您调用 delete p1
时,您甚至释放了 p2
指向的 int。 p2
的任何用法都可能以分段错误结束。
b) 您正在将 p2 的值分配给 p1,这意味着您最终得到两个动态分配的指针,它们的值都为 p2。但它们将是 int 的两个不同的独立实例!因此,如果您 delete p1
,p2
仍然可以访问。
2。 根据定义,
int *p1, *p2;
p1 = new int;
p2 = new int;
下面两个赋值有什么区别。
a) p1 = p2;
b) *p1 = *p2
a) 当您取消引用 p1 时,您将 p2(这是一个地址)分配给 p1.So,您将获得与 *p2 相同的值。如果你改变 *p2 而不是 *p1 基本上也会 change.So ,在这种类型的赋值中 p1 和 p2 都引用相同的地址 location.This 会产生内存泄漏,因为分配给 p1 的地址是不再引用。
b) 在这种情况下,*p2 中的值被分配给*p1。但他们仍然指向不同的地址位置。如果在分配后更改 *p2 的值,它不会更改 *p1.
你忘了说语言,但我猜你指的是 C 还是 C++。
a) 简单的地址分配。 p1
将指向 p2
。所以你最终得到两个指向一个 int 实例的指针。这意味着,您通过覆盖它来释放指向 p1 的指针,但它的实例将保留在内存中 unfreed 并且您将无法释放它甚至无法访问它! (如果您没有在其他地方复制 p1
...)使用 valgrind 来查看。但是,当您调用 delete p1
时,您甚至释放了 p2
指向的 int。 p2
的任何用法都可能以分段错误结束。
b) 您正在将 p2 的值分配给 p1,这意味着您最终得到两个动态分配的指针,它们的值都为 p2。但它们将是 int 的两个不同的独立实例!因此,如果您 delete p1
,p2
仍然可以访问。