簡體   English   中英

雙重刪除C ++中分配的兩個變量

[英]Double delete two allocated variables in c++

我得到以下代碼:

int **a;
int *b;

b = new int;
a = new int*;

*b=10;
a =&b;

std::cout << **a << std::endl;// display 10

如果我這樣做:

delete a;

我也刪除“ b”嗎?

delete a;

因為a不與分配new ,這會導致不確定的行為。

當您第二次分配給a時,問題實際上就開始了。

b = new int;
a = new int*;
*b = 10;
a = &b; // oops

此時,你已經失去了軌道由原始呼叫分配對象的new ,您最初保存在a 這就是內存泄漏。

您的代碼應該看起來像這樣:

int *b = new int;
*b = 10;
int **a = &b;
std::cout << **a << std::endl;
delete b;

如果delete a則會在Universe的結構上造成一個洞,因為a不再指向該new int* ,而是指向未動態分配的b

b是動態分配的(b = new int;),然后將10存儲到分配的int中。

然后,我們將“ a”指針分配給指向int的指針。 但是然后將其分配給“ a”,這意味着我們失去了“ a”所指的含義。 當我們刪除a時,我想您會得到一個錯誤,因為它不再指向動態分配的內存。

也許你的意思是* a = b

在這種情況下,您仍然必須刪除a並刪除b

改寫您的問題和代碼:

int * b = new int;  // Dynamically allocate for 1 integer.
int * * a = new int *; // Allocate 1 pointer dynamically.

// The tricky part to understand.
// The variable `a` points to a pointer.
// So dereferencing 'a' results in a pointer to an integer.
// So, assign the pointer, in dynamic memory, with the content
// of the 'b' pointer.
*a = b;

// What does this statement do?
delete a;

在上面的示例中, delete釋放了為a變量分配的內存。 僅此而已。

指針b不受影響。 它仍然指向分配給整數的內存。

內存的釋放a不影響b ,因為釋放功能上不分配內存的內容進行操作。

是。 好吧,它刪除了b指向的對象。 ab仍將具有原始對象地址的值。 為了確保ab的使用不正確,請嘗試添加以下內容:

a=NULL;
b=NULL;

暫無
暫無

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

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