- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語プログラミングで・・・)
C言語プログラミングで九九の配列問題が実行停止した件について
このQ&Aのポイント
- C言語プログラミングの学習中の中学生が、配列の問題を解いている最中に実行停止のメッセージが表示されました。原因を知りたいです。
- C言語プログラミングの中学生が配列の問題を解いていた際、実行停止のメッセージが表示されました。どのような原因が考えられるでしょうか。
- 中学生のC言語プログラミング学習者が配列の問題を解いていたところ、実行停止のメッセージが表示されました。原因を調査してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
同じような回答ですが、配列に不正アクセスしています。 int kuku[9][9]; と宣言すると、 メモリ上にsizeof(int)分のデータが(9*9)個作成されます。 そこで問題ですが、C言語は先頭の添字(インデックス)を0と定義しています。 つまり、先頭は kuku[0][0] 最後尾は、 kuku[8][8] // 0~8で9個あります となります。 質問者のfor()を確認してくだい。 i >= 9 は 0 ~ 9 を真とします。 ですので、 kuku[9][9] をアクセスすることになり、 OSがアプリを強制停止、エラーとなります。 余談ですが、他の言語ではこういったエラーが簡単に検出できるので、 C言語の知識はいずれ役に立ちますよ~。 C言語はエラーは出たらラッキー位に思うのが大切ですよ。 いずれ、関係の内箇所でエラーorzなんてことが頻繁におきるので…
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
回答No.1
int a[9]; としたときに a[X] として使えるXは、いくつからいくつでしょう? ちゃんと説明があるはずです。 n=1~Nを使いたいときは ・a[N]で宣言 → a[n-1]と添え字を調整する ・a[N+1]で宣言 → a[n]で使用、a[0]は使わない(メモリの無駄ではある) が常套手段です。 C言語では、配列の範囲外の添字を使うことが、即エラーとはなりません。 たまたま動いているように見えることもあります。 添字の範囲は十分に注意しましょう。
質問者
お礼
あ~、なるほど 基本的なところを見ぬかっていたようです。 回答ありがとうございました。
お礼
回答ありがとうございます。 基本的な部分を見ぬかっていたようですね。 確かに、ここで勉強した知識はいろんな言語に役立ってくると思います。 これから、C++、Javaなども勉強していきたいなと思っているので、忘れないようにしていきます。