2009-10-29 81 views
0

在控制檯程序這樣做:檢查和調試器,X(C#)

object x = new string(new char[0]); 

如果一個X的分配後設置一個斷點rigt並帶來了快速監視窗口,什麼是顯示爲& X調試器?我期待着x的地址,但看起來我錯了?


編輯:我問這是因爲another thread,這是指出,如果一個人做

object x = new string(new char[0]); 
object y = new string(new char[0]); 

x和y將引用同一個對象。因爲我想看看,我嘗試使用&操作者在調試器中檢查這些變量的地址,並在第一,我有他們不同的印象。但是,擴展結果後,二級值確實匹配 - 所以這些似乎是「真實地址」。

+0

哪個調試器?視覺工作室? – user200783 2009-10-29 12:31:11

+0

是的,Visual Studio。 – 2009-10-29 12:32:14

+0

好的,我添加了visual-studio標籤。 – user200783 2009-10-29 12:33:16

回答

2

如果我顯示x我得到「」,據報道,該型「對象{string}裏」 - 這是我的期望。

&x顯示0x062fd7f0(在我的情況下)報告類型爲「對象& *」。將其擴展爲另一個指針和類型爲「對象&」。

在第一種情況下,調試器有足夠的信息來制定出類型,並告訴你一些有用的東西。

在所有調試器「知道」第二情況是變量是一個對象,以便只能顯示指針(我想)。

UPDATE

你的更新是有道理的。通過&x&y報告的值是指針的變量。它們保存的值是指向不可變字符串「」的指針。

+0

那麼,真正的地址似乎是擴展的(對象&)? – 2009-10-29 12:42:07

+0

的確,檢查&x會給出一個指向地址的指針。 *&x給出地址值。 – 2009-10-29 13:25:03

0

你不能這樣做,因爲內存管理是由CLR處理的

+0

是,編輯我的問題,以澄清(希望)我試圖做的。 – 2009-10-29 13:04:46