質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

6244閲覧

Segmentation fault(コアダンプ)

FumiakiNakao

総合スコア180

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/01/20 07:10

以下のようなプログラムを書いたのですが、コンパイルして実行すると
「欠けている数字を入力してください」と表示された後に
「Segmentation fault(コアダンプ)」というエラーがでます

原因はなんなのでしょうか?

c

1#include<stdio.h> 2#include<time.h> 3#include<stdlib.h> 4 5#define MAX_STAGE 10 6#define swap(type,x,y) do{type t=x;x=y;y=t;}while(0) 7 8int main(void){ 9 10 int i,j,stage; 11 int dgt[9]={1,2,3,4,5,6,7,8,9}; 12 int a[8]; 13 double jikan; 14 clock_t start,end; 15 16 srand(time(NULL)); 17 18 printf("欠けている数字を入力してください\n"); 19 20 start=GetTickCount64(); 21 22 for(stage=0;stage<MAX_STAGE;stage++){ 23 int x=rand()%9; 24 int no; 25 26 i=j=0; 27 while(i<9){ 28 if(i!=x) 29 a[j++]=dgt[i]; 30 i++; 31 }//抜く数字の確定 32 33 for(i=7;i>0;i++){ 34 int j=rand()%(i+1); 35 if(i!=j) 36 swap(int,a[i],a[j]); 37 }//シャッフル 38 39 for(i=0;i<8;i++){ 40 printf("%d",a[i]); 41 } 42 43 printf(":"); 44 45 do{ 46 scanf("%d",&no); 47 }while(no!=dgt[x]); 48 } 49 50 end=GetTickCount64(); 51 52 jikan=(double)(end-start)/CLOCKS_PER_SEC; 53 54 printf("%.1f秒かかりました。\n",jikan); 55 56 if(jikan>25.0) 57 printf("鈍すぎます\n"); 58 else if(jikan>20.0) 59 printf("少し鈍いですね。\n"); 60 else if(jikan>17.0) 61 printf("まあまあですね\n"); 62 else 63 printf("素早いですね"); 64 65 return 0; 66} 67

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

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--を間違えているのではないでしょうか?

投稿2016/01/20 07:21

kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

よく読んでないので原因はわかりませんが、
http://exp1gw.ec.t.kanazawa-u.ac.jp/PC/gdb.html
http://www.geocities.co.jp/SiliconValley-Cupertino/4084/Cprogram/gdbcore/
の手順を踏むと、ソースの何行目がエラーになったかわかるはずです。

投稿2016/01/20 07:13

編集2016/01/20 07:17
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FumiakiNakao

2016/01/20 08:43

ありがとうございます 参考にさせていただきます
matobaa

2016/01/21 11:11

ぜひ参考にしてください。デバッガを使えるようになれば、すばやくバグの原因を究明できるようになるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問