[英]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
指向的對象。 a
和b
仍將具有原始對象地址的值。 為了確保a
和b
的使用不正確,請嘗試添加以下內容:
a=NULL;
b=NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.