質問: 以下のようなプログラムを書いたのですが、コンパイルして実行すると 「欠けている数字を入力してください」と表示された後に 「Segmentation fault(コアダンプ)」というエラーがでます 原因はなんなのでしょうか? ``` #include #include #include #define MAX_STAGE 10 #define swap(type,x,y) do{type t=x;x=y;y=t;}while(0) int main(void){ int i,j,stage; int dgt[9]={1,2,3,4,5,6,7,8,9}; int a[8]; double jikan; clock_t start,end; srand(time(NULL)); printf("欠けている数字を入力してください\n"); start=GetTickCount64(); for(stage=0;stage0;i++){ int j=rand()%(i+1); if(i!=j) swap(int,a[i],a[j]); }//シャッフル for(i=0;i<8;i++){ printf("%d",a[i]); } printf(":"); do{ scanf("%d",&no); }while(no!=dgt[x]); } end=GetTickCount64(); jikan=(double)(end-start)/CLOCKS_PER_SEC; printf("%.1f秒かかりました。\n",jikan); if(jikan>25.0) printf("鈍すぎます\n"); else if(jikan>20.0) printf("少し鈍いですね。\n"); else if(jikan>17.0) printf("まあまあですね\n"); else printf("素早いですね"); return 0; } ```
回答: > > for(i=7;i>0;i++){ > > int j=rand()%(i+1); > > if(i!=j) > > swap(int,a[i],a[j]); > > }//シャッフル > > > ここの部分で7以降ずっと1を足し続ける無限ループになっているので 配列で確保した領域の外までアクセスしに行っています。 たぶんi++とi--を間違えているのではないでしょうか?