質問するログイン新規登録

Q&A

解決済

1回答

7069閲覧

ハンドルされていない例外への対処方法

退会済みユーザー

退会済みユーザー

総合スコア0

グラフ理論

グラフ理論とは、頂点(node)と辺(edge)で構成されたグラフに関する数学理論で、グラフの多様な性質を探求することを指します。グラフは、頂点と向き(矢印)を持つ辺で構成された有向グラフと、矢印のない無向グラフに分類。さまざまな日常の場面で使用することを目的としている理論です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

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

0グッド

0クリップ

投稿2021/11/16 12:08

編集2021/11/24 13:31

0

0

前提・実現したいこと

生成した接続行列から行をランダムに取り出し、一つの行に組み合わせる。その後組み合わせた行は被覆しているかをチェックし、結果を「ture」「false」で出力する。
出力した後、取り出した行を一つずつ減らしていき最小頂点被覆数を求める。

0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 → この行列から複数の行を取り出し、組み合わせて一つの配列にする。 0 1 0 0 0 0 0 1 0 0      できた配列の全ての要素が1になっているかをチェックし結果を出力する。 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 1

発生している問題・エラーメッセージ

「ハンドルされない例外が 0x7A28FC66 (ucrtbased.dll) で発生しました: 無効なパラメーターを致命的と見なす関数に無効なパラメーターが渡されました」といった内容が出ます。

イメージ説明

該当のソースコード

C++

試したこと

以下の内容が115行目のint x = tem[gm];にて出ます。頂点数を10にしてみたり、100にしてみたりすると最後まで探索し実行できるのですが、頂点数を50とかにすると以下の出力をしてエラーが出ます。

頂点数 = 50 グラフの辺数 = 612

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019で入力しています。

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

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

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

int32_t

2021/11/21 06:14

「エラーとなっている」とは具体的にどういう状況なのでしょうか? 例: コンパイルできない、実行しても何も起きない、など どこまで実行が進むか、Visual Studio 上でデバッグ実行してみてください。
int32_t

2021/11/22 03:24

> debug assertion failedとなっている状態です。 そのダイアログに書いてある情報がとてもとても重要です。書き写して質問文に追記してください。 Visual Studio でデバッグ実行してみましたか?
退会済みユーザー

退会済みユーザー

2021/11/22 03:49

デバックで実行してみたところ、このような写真が出ます。 ダイアログはこちらのものになりますか?
guest

この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。

回答1

0

ベストアンサー

vector subscript out of range

これは、std::vector の添字がサイズ以上になっているという意味です。
Cover_search() の中の ram2[gm] ram2[j]Is_cover() の中の matrix[i]Coalescence() の中のイロイロで添字がサイズ以上になっていないか再確認してください。

投稿2021/11/22 04:07

int32_t

総合スコア22023

退会済みユーザー

退会済みユーザー

2021/11/22 07:28

以下のプログラムを入れると同じエラー内容がでるのですが、どうしたら良いでしょうか? if (Is_cover(a, matrix, ram1, ram2) == true) { for (int j = 0; j < ram1; j++) { cout << ram2[j] << ","; } cout << "true" << endl; ram1--; } else if (Is_cover(a, matrix, ram1, ram2) == false) { cout << "false" << endl; ram2.push_back(am); }
退会済みユーザー

退会済みユーザー

2021/11/22 08:10

読んだのですが、どの部分が原因でエラーと出ているのかわからないです。
int32_t

2021/11/22 08:18

Cover_search()の先頭にブレークポイントを置いて「デバッグの開始」して、ブレークポイントで止まったらステップインを繰り返し実行してください。
退会済みユーザー

退会済みユーザー

2021/11/22 09:29

69行目にあるint e = r2[iV];にてエラーしました。
int32_t

2021/11/23 12:55

> 69行目にあるint e = r2[iV]; ということは、 ・ Coalescence() の引数 r1 が引数 r2 のサイズ以上になっているのが悪い ・Is_cover() の引数 r1 が引数 r2 のサイズ以上になっているのが悪い Cover_search() で ram2.erase() で ram2 のサイズが減っているのに Is_cover() に ram1 を渡して大丈夫なのかな、とか、main() で ram1 がn以上になることがあるけどいいのかな、とかがぱっと見で気になりました。
退会済みユーザー

退会済みユーザー

2021/11/23 17:44 編集

どこが悪いのか明確に分からないため、参考になるようなプログラムが見たいのですが、ありますでしょうか?
fana

2021/11/24 09:42

> どこが悪いのか明確に分からない You have to debug your code yourself before asking. Check the progress step by step to find out what's wrong.
guest

この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問