tl; dr - 請您在下面的第一個代碼片段中展開4條評論?具體是什麼意思derefC/C++指針問題
我是一個很長時間的Java開發人員,希望學習C++。我遇到了針對開發者的this website。
int x, *p, *q;
p = new int;
cin >> x;
if (x > 0) q = &x;
*q = 3; // 1. deref of possibly uninitialized ptr q
q = p;
p = new int; // 2. potential storage leak (if x != 0 this
// memory will not be returned to free storage)
*p = 5;
delete q;
*q = 1; // 3. deref of deleted ptr q
q = p;
if (x == 0) delete q;
(*p)++; // 4. deref of possibly dangling ptr p (if x is zero)
儘管我認爲我理解指針是如何工作的,但我發現這些註釋很難理解。
我把;
- 我們要麼分配X(& *當然Q)在3或當q!= & X則Q有一個公正的價值,因爲它是未初始化的,我們剛纔隨機分配的一塊內存到值3.我不確定如何解引用未初始化的東西?
- 這很好
- 取消引用已刪除的指針有什麼問題?在'刪除q'之後* q是無意義的?
- 懸掛指針有什麼問題?即使我們仍然有指向它的指針,現在我們已經刪除了它,內存是否可以重新分配?
我想我的基本誤解是關於只是聲明一個int指針,這是否也分配內存?它是堆棧還是堆?
解除引用是否意味着'讀取指針地址處的值'?我認爲我的混淆是,我認爲它會失去對某些數據的引用;
int *x;
x = new int;
*x = 5;
x = new int; // Dereferencing the first bit of memory allocated.
感謝您的耐心,我希望這有一定道理的問題,
GAV株系
對指針可能發生的所有問題的良好總結。 – 2010-02-08 11:58:47
另一方面,變量名稱使其不可能遵循邏輯。真正的代碼永遠不會接近這個複雜的(或者說,不應該是) – 2013-01-30 19:24:19