回覆列表
-
1 # 大小馬哥
-
2 # 比特幣交易員
死迴圈是程式執行一段程式碼,永遠也不會退出,一直在這段程式內迴圈執行。
如何避免死迴圈?
1、首先你要知道,迴圈執行一段程式,你想要退出這段程式,你需要滿足一個判斷條件,當這個條件不滿足時就會退出該段程式;
2、在設定迴圈的退出條件時,一定要注意這個條件會不會永遠都在執行,所以在寫迴圈條件的時候,一定要小心;
-
3 # TonyDeng
任何程式都可能出現死迴圈,不是C語言特有的。
出現死迴圈的可能性很多,除了常見和較低階的編碼錯誤,還有不可控的外部條件引起,比如讀磁碟遇到壞區反覆讀也陷入死迴圈。
避免死迴圈的方法,只能是編寫程式碼時考慮周到,時刻想著如果死迴圈應怎麼處理,在程式碼埋入預防措施,比如用時鐘中斷計時或訊息之類(此時寧願執行慢也要防跳不出陷阱),跟程式設計師的經驗有關,沒有絕對有效的方法。
不是所有死迴圈都是有害的,有些業務必須處於死迴圈中等待事務觸發,基於事件的程式就往往如此,像網路通訊,肯定要死迴圈不斷檢測通訊埠有沒有資料傳入。
死迴圈指的是迴圈條件永遠成立,迴圈體中的程式碼會不斷重複執行,永不退出。最簡單的一個死迴圈的例子:
while(1)
{
//要執行的程式碼
}
一般在多執行緒的程式程式碼中,是需要這樣的死迴圈的,比如建立一個執行緒,迴圈不斷接收網路上過來的訊息進行處理,不需要退出,由於是多執行緒,該死迴圈不會影響其他執行緒,但是要注意用sleep或者usleep讓程式每迴圈一次就休眠一下,避免佔用太高CPU。上面講到的是正常的期望的死迴圈,有一些迴圈我們本意是讓其執行一定次數就退出,但由於程式碼寫得有問題,導致迴圈條件永遠成立,就變成了死迴圈,這種情況會導致整個程式阻塞在這裡,出現嚴重BUG,我舉一個例子:
char i = 0;
while(i < 200)
{
//要執行的程式碼
i++;
}
這個程式碼的本意是想迴圈執行200次後就退出,但實際上是個死迴圈,永遠不會退出,因為i是個char型別,其取指範圍是-128~127,無論怎麼++都不會變成大於等於200的一個數。我們在寫迴圈程式碼時,要仔細分析檢查迴圈條件,看是否一定會退出,避免出現類似這種非期望的死迴圈。