void _this()
{
string a = "i am a"; // original value of variable a
string* modifier = NULL; //pointer is declared 0x0000...
modifier = &a; // 0x0000 -> 0x0a //modifier stores the address of a
*modifier = "modified"; // 0x0a + 0x0modified... //modifier assigns "modified" to the address of a;
cout << a << endl << modifier<<"\n"; //shows "modified" + the address of modifier in memory
modifier = NULL; // the pointer(modifier...) now points to nothing....is it no longer "dangling"???
cout << modifier; // shows only zeros...000000000
}
回答
我打算假設你使用C++而不是C,而當你說字符串時,你的意思是::std::string
。
上面的代碼中沒有顯示內存泄漏。
另外,懸掛指針只有在對象超出範圍或被刪除時纔有意義。你在這裏既沒有這些東西。
嗨。謝謝。是的,這是一個C++代碼,但我標記爲C,因爲指針概念是與c/C++相關的時間的90%。我現在看到,但我的想法正是如此。 – someoneyeah 2011-03-09 20:05:03
代碼中沒有懸掛指針。在幾條線上,左邊(第一個)評論是錯誤的,而第二條評論是正確的。例如//0x0000 -> 0x0a //modifier stores the address of a
:在該行之後,modifier
保存變量a
的地址,該地址幾乎肯定不同於物理地址0x0a
。
一個懸掛指針是指向無效內存的指針(不是NULL)。通常與最初指向有效內存的指針相關聯。
int x = new int(4); // x valid;
delete x; // x is now dangling.
// It points at memory that does not belong to application
x = NULL; // x is not dangling.
在你原來的例子指針永遠吊着因爲它指向一個自動變量,將永遠是有效的(而修改是有效的)。雖然如果你返回修改作爲結果從函數,然後將懸垂(如果你還沒有分配NULL)。
在C中刪除指針後爲NULL指定NULL在C中非常重要。但在C++中沒有這麼多,因爲指針應該封裝在類中,以便在使用完成後它不再可用。
std::string data; // There is a pointer inside here.
// No need to set it to NULL. The destructor handles all that.
10倍......現在「更清晰了......」因此,對象應該總是超出範圍或被刪除,指針變成懸空。 – someoneyeah 2011-03-09 20:07:55
- 1. 如何防止掛起此Java代碼
- 2. 懸掛指針
- 3. 如何防止c中的懸掛指針/垃圾?
- 4. 這是否使用C指針可以防止泄漏內存?
- 5. 懸掛參考。懸掛指針和引用的替代品?
- 6. 如何防止此指針改變?
- 7. C懸掛指針問題
- 8. Realloc創建懸掛指針?
- 9. 這是一個懸掛指針?
- 10. 是否可以讓此代碼更小?
- 11. 是否可以縮短此代碼?
- 12. 爲什麼懸掛指針可以繼續訪問對象?
- 13. 找到一個懸掛指針
- 14. 有什麼不對?懸掛指針?
- 15. 如何防止此代碼中的NullPointerException?
- 16. 動態分配指針數組中的懸掛指針
- 17. static_cast是否可以將非空指針變成空指針?
- 18. 防止指針移開後的懸停效果
- 19. 當使用此代碼返回到頁面時,是否可以防止getJSON請求再次運行?
- 20. 此代碼是否可以防止SQL注入攻擊併爲何不起作用?
- 21. 骨幹 - 如何重構此代碼以防止鬼視圖?
- 22. 此代碼是防止重複ID的正確方法嗎?
- 23. 此代碼是否可以進一步優化?
- 24. 是否有可能改進此代碼以獲得速度?
- 25. 是否可以在此代碼中添加3張照片?
- 26. 此代碼是否可用?使用Javascript/asp.net(代碼不工作)
- 27. 代碼簽名以防止盜版
- 28. javascript代碼,以防止提交表單
- 29. 是否可以指向類成員的Typedef函數指針?
- 30. QxOrm是否可以堅持指向抽象類的指針?
我不明白這個問題,代碼太複雜了。 – 2011-03-09 19:46:22
*爲什麼*你會寫這樣的代碼嗎?它有什麼用處? – birryree 2011-03-09 19:47:03
C中沒有'string';也沒有'cout'和'<<'的用法很簡單:刪除了'c'標籤 – pmg 2011-03-09 19:47:13