2016-09-20 179 views
0

代碼:事件處理程序觸發System.StackOverflowException

private void addExcel(object sender, TextChangedEventArgs e) 
{ 
     if (!textBox.Text.Contains('!')) 
     { 
      textBox.Text += "!"; 
     } 
     StringBuilder sb = new StringBuilder(); 
     sb.Append(textBox.Text); 
     sb.Remove(textBox.Text.IndexOf('!'), 1); 
     textBox.Text = sb.ToString(); 
} 

http://i66.tinypic.com/24cy1aq.png 的例外sb.ToString(); 會出現此應用程序應該計算階乘。

+0

嗨雷。考慮將整個方法添加到您的代碼示例中,並讓我們知道什麼事件觸發它。我想我有下面的答案,但編輯這將有所幫助。 –

回答

3

我認爲這就是所謂的在你TextBox.TextChanged事件。發生這種情況時:textBox.Text = sb.ToString(); 它增加了一個string沒有「!」該文本框,然後將其改變,然後觸發事件,然後:

if (!textBox.Text.Contains('!')) 
     { 
      textBox.Text += "!"; 
     } 

增加了一個,然後觸發它再次刪除事件「!」。 FOREVAR!

最好的辦法是分配sb.ToString()另一個變量,比文本框等。

0

根據您提供的代碼,不可能告訴您您的應用程序出了什麼問題;該代碼不包含堆棧溢出。

我假設你正在使用遞歸來計算階乘。可能的罪魁禍首是你得到的遞歸結束條件錯誤,實際上是無限遞歸。發生堆棧溢出的確切位置通常是非實質;它恰好是導致分配超過極限的命令。

請仔細看一下執行實際階乘計算的代碼。

相關問題