伊莉討論區

標題: C語言,為什麼會出現"存取違規錯誤(Segmentation Fault)"? [打印本頁]

作者: eve274927    時間: 2011-12-29 12:29 AM     標題: C語言,為什麼會出現"存取違規錯誤(Segmentation Fault)"?

提示: 作者被禁止或刪除 內容自動屏蔽
作者: baepi    時間: 2011-12-29 10:05 AM

敏感內容指的像是p r i n t f ~大大只要像我這樣把這單字用空格拆開~就可以讓你貼文了
理論上只有這單字會這樣...理論上...
話說~伊莉太坑人了~下載說扣一點~實際扣我兩點orz
另外...對不起發帖大大...嚴格來說~您的程式碼太多漏洞...讓我很難一一指證說明
只能清楚的回答大大~大大會錯誤~是因為這輸入那裡少了一個"&"<<<這東西
詳情可上網爬scanf
以下是稍微解說大大嚴重錯誤的注解
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int N=6;
  5. int lott[]={0},inp[]={0},che[]={0};

  6. void random_lot(void)//產生亂數
  7. {
  8.   
  9.         int x,i=0,j;
  10.   
  11.         srand((unsigned) time(NULL));
  12.   
  13.         lott[0]=rand() %49+1;
  14.         for(i=1;i<N;i++)
  15.         {   
  16.                 lott[i]=rand() %49+1;
  17.                 if(lott[i] == lott[i-1])        //此處檢查沒有意義...因為即使檢查兩值相等~也只是重新產生亂數~但此亂數並不能保證不會又兩值相等
  18.                 {
  19.                         lott[i]=rand() %49+1;        //而且這檢查也無法檢查出第一個值是否會等於第三~第四~第五個~第六個值
  20.                 }
  21.         }
  22.         for(i=0;i<N-1;i++)//double check
  23.         {
  24.                 for(j=i+1;j<N;j++)
  25.                 {
  26.                         if(lott[j]==lott[i])        //此處檢查同上沒有意義...因為只檢查一次~再次產生亂數後並無再檢查
  27.                         {
  28.                                 lott[j]=rand() %49+1;
  29.                         }
  30.                 }
  31.         }
  32.    
  33.         for(i=0;i<N;i++)//test
  34.                 p r i n t f("%d\n",lott[i]);
  35.         p r i n t f("\n\n");
  36.    
  37.         for(i=0;i<N-1;i++)
  38.         {
  39.                 for(j=i;j<N-1;j++)
  40.                 {
  41.                         if(lott[i]>lott[j+1])
  42.                         {
  43.                                 x=lott[j+1];
  44.                                 lott[j+1]=lott[i];
  45.                                 lott[i]=x;
  46.                         }
  47.                 }
  48.         }  
  49.   
  50.     for(i=0;i<N;i++)
  51.     {
  52.                 p r i n t f("%d\n",lott[i]);
  53.         }//test
  54.   
  55. }
  56. void check_lot(void) /////檢查是否中獎
  57. {
  58.      int i,j,plus=0;
  59.       
  60.    for(j=0;j<N;j++)
  61.     {  
  62.      for(i=0;i<N;i++)
  63.      {
  64.        if(inp[j]==lott[i])
  65.            {
  66.                    che[j]=1;
  67.                    plus++;
  68.                    p r i n t f("%d\n",inp[j]);
  69.            }
  70.        else
  71.            {
  72.                    che[j]=0;
  73.            }
  74.      }
  75.     }
  76.    
  77.     p r i n t f("\n%d\n",plus);
  78.     for(i=0;i<6;i++)
  79.     {
  80.       if(che[i]==1){p r i n t f("%d ",inp[i]);}      
  81.     }
  82. }
  83. int main(void)
  84. {
  85.         int i;
  86.         p r i n t f("請輸入六個樂透數字:");
  87.         for(i=0;i<6;i++)
  88.         {
  89.                 scanf("%d",&inp[i]);        //這邊少了一個&...所以才會錯
  90.         }
  91.         random_lot();
  92.         check_lot();
  93.         system("PAUSE");
  94.         return 0;
  95. }
複製代碼

作者: ajiljmn    時間: 2011-12-29 08:06 PM

試試看把int lott[]={0},inp[]={0},che[]={0};
改成int lott[7]={0},inp[7]={0},che[7]={0};
呢?




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!