簡體   English   中英

將指針指定為NULL時會發生什么?

[英]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后, ab用於指向的對象不再存在。 因此, ab不再是有效的指針,你不能對使用它們的值做任何事情。 特別是,嘗試拒絕指針將導致未定義的行為。 (但是,如果使它們指向有效對象,則可以重用這些變量。)

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;

ab指向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.

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