2008-10-08 82 views
1

好吧,這是一個奇怪的。垃圾數據也不是隨機的,它似乎是可執行文件本身的子字符串。異常導致字符串(C#)中的垃圾數據

private void Form1_Load(object sender, EventArgs e) 
{ 
    string s = GetValue(); 
    // at this point, s == "400". Why isn't really relevant (dumbed down a test) 
    if (s != "18446744073709551615") 
     throw new Exception(); 
     // When the exception is thrown though, the string is set to random 
     // data from inside the executable. 
} 

這似乎依賴於一定的GetValue看似微不足道的實施細則()如的String.format()的調用在不同的地方是。

有沒有人遇到類似的東西或有任何想法可能會導致此?

+0

我認爲你應該包括GetValue()的定義,不管它多長時間 – 2008-10-08 03:24:19

+0

另一個大問題是你如何檢查數據的「s」,更重要的是「何時」你檢查數據?在引發異常並且「s」現在超出範圍之後,您是否檢查它? – 2008-10-08 03:32:39

+0

是的,這是VS彈出後,它是未處理的異常的東西。雖然我不記得以前發生過的局部變量。 – 2008-10-08 03:34:36

回答

2

「我正在VS的」本地「窗口中檢查它」

這就解釋了它。與流行的觀點相反,C#被允許進行一些優化。如果你在函數的最後沒有添加「KeepAlive」,那麼這個值並不需要存儲。

0

如果在引發異常並且現在超出範圍之後檢查變量,那麼它應該指向的內容只是垃圾。你有沒有試過在拋出異常之前和之後檢查這個變量的值?