ここから本文です

プログラミングをしたら添付画像のようにセグメントエラーが起きました。何を直し...

アバター

ID非公開さん

2017/10/1712:28:17

プログラミングをしたら添付画像のようにセグメントエラーが起きました。何を直したらいいのでしょうか?ちなみに、件数を入力し、データを打つことが目的です。C言語です。

C言語,int data,セグメントエラー,プログラミング,int n,件数,添付画像

閲覧数:
22
回答数:
3

違反報告

ベストアンサーに選ばれた回答

ter********さん

2017/10/1713:39:53

画像が小さくて、文字がよく読めません。
ソースプログラムの文字を貼り付けてください。

実行画面は、入力件数が10らしいことは推測できるので、貼り付け不要。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2017/10/1718:04:43

Cでは、ローカル変数(関数内で宣言された変数)の初期値は「不定」です。0かも、-100かも、20億かも、わかりません。
int n;
int data[n];
とすると、nの値はプログラムからはわかりませんが、実行時にはとにかくなにかの値が入ります。例えばnが0だったら、要素数0の配列って何、とか。
9だったら、10番目以降のデータ入力では配列の範囲外にアクセスすることになってしまうでしょう。(多分この状態)
20億だったら...メモリ管理の関係が破綻しちゃいます。
C言語なので、その辺の警告はまともに出してはくれません。プログラマが自衛しないといけません。

int n;
の後に
scanf("%d",&n);
でnの値を確定させてから
int data[n];
としましょう。昔のCでは変数宣言はブロック開始直後('{'のあと)に実行文等が登場する前に書かなければいけませんでしたが、今どきのCはその辺好きな場所に書けますから。

なお、配列の要素数に変数を使える「可変長配列」は、1999年版のC99で規格に採用されましたが、2011年のC11では「オプション」に格下げになっています。結果、1999年規格に対応したコンパイラを結局出さずに2012年まで旧規格で引っ張ったVisual Cではこれは使えません。

Windows以外では標準で使われているgccやclangでは使えますが、今後Windowsでプログラムを書くつもりなら注意した方がいいかも知れません。

yuk********さん

2017/10/1713:43:49

int data[n];

をforの前に持ってきてください

このソースだとnが宣言されてないので
うまく行きません
というかnが初期化されてないので、エラーにならなくても
とんでもないメモリ量が確保されてしまうかも

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる