[英]What will happen when we assign a pointer NULL?
我有一個指向某些數據的指針。 現在我創建了一個類似的指針。 現在,這個新指針被分配給舊指針。 如果我刪除舊的將會發生什么?
A* a = new A();
A* b = a;
a = NULL;
“a”和“b”會發生什么?
而且,如果我做了以下事情:
A* a = new A();
A* b = a;
delete a;
而且我想知道當我們分配NULL時,指針會發生什么。
A* a = new A();
a = NULL;
一個仍然指向一些記憶或它指向什么?
A* a = new A();
A* b = a;
a = NULL;
在此之后, b
仍然指向第一行中分配的對象。 a
現在指向什么。 你仍然可以通過b
指針“使用”對象,你可以通過delete b;
刪除對象delete b;
。
你可以delete a;
這里 - 它將沒有任何效果(因為a
是NULL),但它是安全的,不會導致未定義的行為。
A* a = new A();
A* b = a;
delete a;
delete
后, a
和b
用於指向的對象不再存在。 因此, a
和b
不再是有效的指針,你不能對使用它們的值做任何事情。 特別是,嘗試拒絕指針將導致未定義的行為。 (但是,如果使它們指向有效對象,則可以重用這些變量。)
A* a = new A();
a = NULL;
您剛剛泄露了第一行中創建的對象。 a
不再指向任何內容,並且您沒有該對象的句柄,因此您無法刪除它。 所以,這是一個普通的舊內存泄漏。
(與第一種情況一樣,你可以delete a;
在a = NULL;
行,但它沒有效果,內存仍然被泄露。)
A* a = new A(); A* b = a; a = NULL;
“a”和“b”會發生什么?
a將為NULL,並且b未經修改
A* a = new A(); A* b = a; delete a;
*a
已被刪除, b
變為無效(此時不得再取消引用b( *b
))。
而且我想知道當我們分配NULL時,指針會發生什么。
A* a = new A(); a = NULL;
*a
未刪除,因此內存泄露。 內存不能再被釋放(除非你在其他地方有一個指針的副本,但代碼沒有顯示)。
A* a = new A();
A* b = a;
a = NULL;
b
繼續指向A
a
指向0x0的地址,解除引用會導致段錯誤。
A* a = new A();
A* b = a;
delete a;
a
和b
指向A
曾經被實例化的地址空間。 現在, A
被刪除,你應該既不提領a
,也不b
,因為它可能會出現段錯誤。
A* a = new A();
a = NULL;
現在,在網絡空間中丟失了地址0x0和A
a
點。 你泄露了記憶。
那個晚了一點。 再次。
@apoorva“如果我將任何新指針指定給a,然后將其設為null,然后刪除a。” 它將沒有任何效果..你不會釋放新A()所占用的內存,只是因為a = null並且你試圖刪除一個; 現在包含NULL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.