2008年10月22日

Bug in Code

以下是我寫的一段程式,犯了一個不該犯的錯,產生一個致命的臭蟲,看出來了嗎?

  1 void ShameOnDPP()
2 {
3 enum { MaxRetry = 500 };
4 unsigned char retried = 0;
5
6 while (++retried < MaxRetry) {
7 OutputDebugString("Shame on you\n");
8 }
9 OutputDebugString("I forgive you\n");
10 }
11


呼叫這個函數,會一直輸出Shame on you的除錯訊息,永遠看不到"I forgive you”。

原因是retried型別為unsigned char,其最大值只到255,因此與MaxRetry (500)比較,結果永遠為真,變成無窮迴圈。

犯錯了,最重要就是要知道自己錯在哪裡,勇敢承認,不要死不認錯

沒有留言:

Google Analytics

Powered By Blogger
Get Paint.NET!