Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态指针赋值c++;_C++_Pointers_Dynamic_Memory Address - Fatal编程技术网

C++ 动态指针赋值c++;

C++ 动态指针赋值c++;,c++,pointers,dynamic,memory-address,C++,Pointers,Dynamic,Memory Address,二,。 根据定义 int *p1, *p2; p1 = new int; p2 = new int; 以下两个作业的区别是什么 a) p1 = p2; b) *p1 = *p2 a) 您正在将p2(一个地址)分配给p1。因此,当您取消对p1的引用时,您将得到与*p2相同的值。如果更改*p2,则*p1也将更改。因此,基本上,在这种类型的分配中,p1和p2都引用相同的地址位置。这将产生内存泄漏,因为分配给p1的地址不再被引用 b) 在这种情况下,*p2中的值被分配给*p1。但他们仍然指向不同的

二,。 根据定义

int *p1, *p2;
p1 = new int;
p2 = new int;
以下两个作业的区别是什么

a) p1 = p2;
b) *p1 = *p2 
a) 您正在将p2(一个地址)分配给p1。因此,当您取消对p1的引用时,您将得到与*p2相同的值。如果更改*p2,则*p1也将更改。因此,基本上,在这种类型的分配中,p1和p2都引用相同的地址位置。这将产生内存泄漏,因为分配给p1的地址不再被引用


b) 在这种情况下,*p2中的值被分配给*p1。但他们仍然指向不同的地址位置。如果在赋值后改变了p*2的值,它不会改变*p1.

你忘记提到语言,但我猜你是指C或C++。 a) 简单地址段<代码>p1将是指向
p2
的指针。因此,最终会有两个指针指向int的一个实例。这意味着,通过覆盖它,您会松开指向p1的指针,但它的intance将保留在内存中,并且您将无法释放它,甚至无法访问它!(如果您没有将
p1
复制到其他地方…)请使用valgrind查看。但是,当您调用
delete p1
时,甚至可以释放int,这是由
p2
指出的。任何使用
p2
的行为都可能导致分段错误


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

您应该用相关语言标记它。但无论如何,第一个赋值是使指针相等(顺便说一句,泄漏一些内存…)。第二个-指针指向的值。我认为这是很明显的..当我得到p1是0137C330 p2是0137C330*p1是-84215041按任意键继续测试时,解引用p1和p2中的值是什么类型的。你在问数据类型吗?您可以打印出值并进行检查。开始对已接受的关于内存泄漏的答案写评论,然后阅读您的。。。所以,也要向上投票!:)