以下是我寫的一段程式,犯了一個不該犯的錯,產生一個致命的臭蟲,看出來了嗎?
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)比較,結果永遠為真,變成無窮迴圈。
犯錯了,最重要就是要知道自己錯在哪裡,勇敢承認,不要死不認錯!
沒有留言:
張貼留言