2010年6月23日 星期三

C語言 無限迴圈 永無止境的跑阿......

昨天是第三堂VB.net的課,開始學迴圈了。
C語言之無限迴圈
老師在示範for這個迴圈時,有提到說VB.net會偵測說是無限迴圈的話,就直接中斷不執行,但如果是在VB 6.0和C語言的話,就真的會跑無限迴圈......
在寫for迴圈時,要設定這個變數的初始值範圍到哪裡(執行次數)每執行完一次迴圈要把這個變數+或-多少
所謂的無限迴圈就是雖然有給正數範圍,但卻設定執行這迴圈一次後往負數修改這個變數,就造成這個變數離範圍越來越遠,變成無限執行!這要用到記憶體來暫存這個變數,數字越大記憶體越用越兇,到最後記憶體容量用完就當機了!

我這死小孩的頑皮心又蠢蠢欲動了,回家寫了C語言的無限迴圈給電腦跑跑看,看著數字越來越大就越爽快,不過倒是沒等當機啦~

以下是我的無限迴圈範例(我是使用Dev-C++編譯):

#include <stdio.h>//先把stdio.h函式庫納入
#include <stdlib.h> //把stdlib.h函式庫納入

int main(int argc, char *argv[])//主程式:主要內容都放在這
{
  int a;//叫電腦把一點記憶體容量分給變數a
  for (a=1; a<2; a--)//迴圈:a初始值為1; 範圍如果超過2就結束; 執行完一次a就-1
  {
      printf("%2d  ",a);//顯示a變數的值
  }
  system("PAUSE");
  return 0;
}

昨天老師是跟我說:從Windows 2000開始就有防護(含Windows XP),記憶體就算用很兇,也不會讓核心的記憶體被程式吃掉,有點類似沙盒防護......說簡單點就是只會讓這個程式當機,不會連整個作業系統一起當!但如果是給Windows 98跑,就真的會連作業系統也一起大當機!(我家現在還有Win 98的電腦,好想玩玩看......哈哈哈!)

PS.這篇網誌順便讓我測試「程式碼區」有沒有成功~可以參考良人的大秘寶: [筆記]在文章裡顯示優質的程式碼區

2010/06/25補充:我前天晚上實際給Windows 98的電腦測試,但沒有達到當機的目的。昨天晚上問了老師,並把一開使用int定義的改成long int,但效果還是一樣。似乎是編譯器的問題,我使用Dev-C++編譯,這個編譯器好像對這個有防護,才沒有達到當機的目的......我改天換編譯器看看好了!