簡體   English   中英

動態指針分配C ++

[英]Dynamic pointer assignment c++

2.根據定義,

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

以下兩個作業之間有什么區別?

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

您忘記提及語言了,但我想您的意思是C或C ++。

a)簡單的地址分配。 p1將成為p2指針。 因此,您最終得到兩個指向一個int實例的指針。 這意味着,您可以通過覆蓋它來釋放指向p1的指針,但是它的實例將不釋放就保留在內存中,並且您將無法釋放甚至訪問它! (如果您沒有將p1復制到其他地方...)請使用valgrind進行查看。 但是,當您調用delete p1 ,您甚至釋放了int,即p2指出的那樣。 p2任何使用都可能會導致分段錯誤。

b)您將p2的值分配給p1,這意味着您最終將獲得兩個動態分配的指針,兩個指針的值均為p2。 但是它們將是int的兩個不同的獨立實例! 因此,如果delete p1 ,則p2仍然可以訪問。

a)您為p1分配了p2(這是一個地址),因此當您取消引用p1時,您將獲得與* p2相同的值。 如果將* p2更改為* p1,則* p1也將更改。因此,基本上,在這種類型的分配中,p1和p2都指向相同的地址位置,這將導致內存泄漏,盡管由於不再引用分配給p1的地址。

b)在這種情況下,* p2中的值分配給* p1。 但是他們仍然指向不同的地址位置。 如果在賦值后更改* p2的值,則不會更改* p1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM