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

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

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

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

Q&A

解決済

1回答

2343閲覧

C++ vector 標準入力を可変長2次元配列で取得する

anamogra

総合スコア1

C++

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

0グッド

0クリップ

投稿2021/10/13 03:16

paiza C098:多重パス回しで2次元vectorを使うと Runtime errorが起こる

C++でvector<vector<int>> vv;を使うとRuntime errorが発生します
1次元配列では動作を確認できました。
添字の指定が違うとのかと思いましたが、Googleで調べても問題ないように見えます

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

該当のソースコード

#include <iostream>
#include <vector> //可変長配列
using namespace std;
int main(void){
// 自分の得意な言語で
// Let's チャレンジ!!
/*
string str;
getline(cin, str);
cout << "XXXXXX" << endl;
*/

//先頭が人数=初期球の保有数格納 //人数分ループ後パスの回数 //パス回数が行*3列保管 :: 多次元配列 int N,M; //標準入力から受け取る int i=0; //ループカウンタ int p=0; //メンバーカウント vector<int> v; //定義配列 vector<vector<int>> vv; //パス配列 //球の移動:[0]の値+1の位置に球の移動数が入る。カラム3 //もし[0]+2=iになったら3列組む while(cin>>N){ //入力に値がある限り if(i==0){ cout<<"N="<<N<<"\n"; //結果出力 p=N+1; cout<<"p="<<p<<"\n"; //結果出力 } if(i==p){ M=N; cout<<"M="<<M<<"\n"; //結果出力 } if(i<p){ vv.resize(i+1); vv[i].push_back(N); //配列の要素追加 //std::cin >> data.at(i).at(0); std::cout<<v[i]<<"\n"; //結果出力 i++; } if(i>p){ //data[] } }

}

C++

1ソースコード

試したこと

1次元配列「v」で動作確認
2次元配列「vv」でエラーを確認

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

vector<int> v; //定義配列

これは何のために存在しているのですか?
定義以降に放置されている様子にもかかわらず

std::cout<<v[i]<<"\n"; //結果出力

として唐突に要素アクセスされていますが,ここで問題が起きるのでは?

投稿2021/10/13 03:36

fana

総合スコア12151

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

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

anamogra

2021/10/13 03:41

治りました!ありがとうございます #原因 1次元で動作確認してた配列「v」になります。 「vv」に変えた時に変更を忘れておりました。 #変更後 vv[i].push_back(N); //配列の要素追加 //std::cin >> data.at(i).at(0); std::cout<<vv[i][0]<<"\n"; //結果出力
fana

2021/10/13 03:50

ぱっと見でわかる話なので答えちゃったけど…… そもそも論として, (1) どこで Runtime error になるのか,自身のコードの処理を追うくらいはしましょう. 発生箇所を突き止めた瞬間に「なんで v やねん」って気づくでしょう. (2) そもそも使わない変数が存在すること自体が異常であると言えます. 「俺はこれからvvを使うぜ!」となった瞬間に,vには「お疲れ,もう帰っていいよ」とでも告げて,コードから v の存在を跡形もなく抹消するべきです. そうすれば,実行するところまで行き着く前に気づけたはずです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問