一個死迴圈

來源:互聯網
上載者:User

好像是在《C陷阱與缺陷》(《C Traps and Pitfalls》)裡,說道一個不易發現的死迴圈:

void deadLoop()

{

Int i;

         Int arr[10];

         //printf(%X\n%X\n%X\n”,&i, arr, &arr[10]);

         For(i=0;i<=10; i++)

                   Arr[i]=0;

}

死迴圈的原因是arr[10]的地址就是i的地址。i與arr都是在棧區申請的空間,i在高地址處,arr在低地址處,而數組又是遞增存放的,因此arr[9]與 i 相鄰。

但是,這段程式並不是在所有的作業系統上都會發生死迴圈的。

在VMware的Ubuntu系統下編譯運行,這段程式是死迴圈。

在win7下的VS2005中測試,結果並不是死迴圈,它總是先申請數組的空間,此時arr[0]與 i 相鄰。於是,

for (i=9; i>=-1; i--)
{
arr[i]= 9;
//printf("%d", i);
//getchar();
}

就是死迴圈了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.