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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2322閲覧

【C++】配列を利用したデータ表示をしたいが、アクセス違反が発生する

_____________

総合スコア8

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/24 02:44

【C++】配列を利用したデータ表示をしたいが、アクセス違反が発生する

プログラムで処理したいことは以下の通りです。

  • 各生徒の成績を、4つの課題の評点に基づきつけ、表示する
  • 評点の最高、最低、平均を求め、表示する

以下のプログラムで処理していることは、以下の通りです。

  • int型配列に、各生徒の4つの課題の評点を宣言
  • 各生徒の評点、評点の合計を表示する

↓プログラム↓

C++

1#include<stdio.h> 2 3#define HYOUKALINE_COUNT 4 4#define STUDENT_COUNT 5 5#define TASK_COUNT 4 6 7int main() { 8 int hyouten[STUDENT_COUNT][TASK_COUNT] = { 9 {23,14,19,25}, 10 {13,16,14,17}, 11 {4,7,11,8}, 12 {12,15,13,17}, 13 {25,25,21,23} 14 }; 15 int hyouten_goukei[STUDENT_COUNT] = { 16 {0}, 17 {0}, 18 {0}, 19 {0}, 20 {0} 21 }; 22 int hyoukaline[4] = { 80,50,20 }; 23 for (int x = 0; x < STUDENT_COUNT; x++) { 24 for (int y = 0; y < TASK_COUNT; y++) { 25 hyouten_goukei[x-1] += hyouten[x-1][y-1];//C6201, C6385 26 } 27 } 28 printf("評点一覧\n 課題1 課題2 課題3 課題4 合計点\n"); 29 for (int x = 0; x < STUDENT_COUNT; x++) { 30 for (int y = 0; x < TASK_COUNT; y++) { 31 printf("   %3d",hyouten[x-1][y-1]); //ハンドルされない例外が 0x001A5449 (seiseki.exe) で発生しました: 0xC0000005: 場所 0x01100000 の読み取り中にアクセス違反が発生しました。 32 33 } 34 printf("  %3d",hyouten_goukei[x-1]); 35 printf("\n"); 36 } 37 getchar(); 38}

↓出力↓

評点一覧  課題1 課題2 課題3 課題4 合計点    39   48   0   -858993460   -858993460   23   14   19   25   13   16   14   17   4   7   11   8   12   15   13   17   25   25   21   23   -858993460   -2094467618   17825220   1712915   1   21362848   21371072   1   21362848   21371072   17825312   1712487   -2094467494   1708862   1708862   15126528   0   0   0   0   0   0   0   0   1746292   1746304   0   17825228   0   17825420   1720224   -2109896854   0   17825320   1712125   17825328   1713048   17825344   1990157145   15126528   1990157120   17825436   2007137316   15126528   540115870   0   0   15126528   0   0   0   0   0   0   0   0   0   0   17825356   0   17825444   2007212096   1452416682   0   17825452   2007137268   -1   2007273438   0   0   1708862   15126528   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

足りない情報などあれば返信ください!

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

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

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

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

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

guest

回答2

0

ベストアンサー

このプログラムの問題点は3つあって、

  1. (他の回答者が指摘済み)配列のインデックスの計算時になぜか-1しているので、インデックスがマイナスになってアクセス違反が出る問題
  2. intの一次元配列hyouten_goukeiの初期値が2次元配列で書いてある問題
  3. 結果の表示を行なうfor文のうち、内側のfor文の継続条件が間違っている(yと書くべきところにxと書いてある)問題

これらを解決すれば、評点一覧が表示されます。

投稿2020/07/24 03:30

Daregada

総合スコア11990

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

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

_____________

2020/07/24 05:27

無事正常に動作しました! ↓出力↓ 評点一覧  課題1 課題2 課題3 課題4 合計点    23   14   19   25  81    13   16   14   17  60    4   7   11   8  30    12   15   13   17  57    25   25   21   23  94
guest

0

hyouten_goukei[x-1] += hyouten[x-1][y-1];//C6201, C6385

x あるいはyがゼロのときは、この配列のインデックスはマイナスとなってしまいます
文字通り、アクセス違反となります

投稿2020/07/24 02:46

y_waiwai

総合スコア87747

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

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

_____________

2020/07/24 03:28

x-1,y-1の「-1」を取り除けば良いということですか?
Daregada

2020/07/24 03:32

むしろ、なぜ「x-1」や「y-1」にする必要があると思ったのですか? xやyが1から始まるならともかく、0から始まるのですから、-1する必要はどこにもないのですけど。
y_waiwai

2020/07/24 03:49

あなたの組んだそのコードに不要なものなら、取り除くべきです。 そうでないなら、単純に取り除いたらまずいでしょうし、そうであるなら、アクセス違反にならないように修正するってことになります
_____________

2020/07/24 05:19

直してみたところ、31行目のprintf("   %3d",hyouten[x][y]);でもアクセス違反が発生してしまいました。 ハンドルされない例外が 0x00515442 (seiseki.exe) で発生しました: 0xC0000005: 場所 0x01102000 の読み取り中にアクセス違反が発生しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問