2017-04-13 3 views
-1

多次元ベクトルに値を割り当てようとしていますが、Visual Studioから「R6010 - abort()」エラーが発生します。多次元ベクトルに値を代入する

私が望むのは、2次元ベクトルが必要なだけ正確に大きい2次元ベクトルです。 (重要私は今はありませんどのように多くの入力値と私はそれが短い定式化するために、後でmyvector.at(i).size();

を使いたいので:なぜ以下の例では、動作していない

#include "stdafx.h" 
#include <iostream> 
#include <vector> 

using namespace std; 


int main() 
{ 

vector < vector <int> > Vektor; 
Vektor.resize(10); 
int tmp; 

while (true) { 
    cout << "Please enter a value: " << endl; 
    cin >> tmp; 
    int size; 

    if (tmp > 0 & tmp < 11) { 
     Vektor.at(tmp - 1).push_back(tmp); 
    } 

    for (int i = 1; i < 11; i++) { 
     size = Vektor.at(i).size(); 
     for (int j = 0; j < size; j++) { 
      cout << "Value at " << i << " , " << j << " : " << Vektor.at(i).at(j) << endl; 
     } 
    } 
} 

return 0; 

}

+0

可能性があり、このエラーが発生した場所それはあなたを教えてください。いずれの場合でも、デバッガを使用する必要があります。 –

答えて

1

あなたは?

for (int i = 1; i < 11; i++) { 
    size = Vektor.at(i).size(); 

変更行:

ラインで間違ったインデックスを使用しています
   |  || 
      v  vv 
for (int i = 0; i < 10; i++) { 
    size = Vektor.at(i).size(); 
0

すでに@RSahuによって回答されているように、ループ内で間違ったインデックスを使用しています。値を修正する代わりに、私はあなたにハードコードされた値を避けることを提案します。

これはいくつかの方法で実行できます。 vector.size()を使用すると、コードを簡単に修正できます。だけではなく、現在の2行で次の2行を使用します。

if (tmp > 0 & tmp <= Vektor.size()) { 

for (int i = 0; i < Vektor.size() ; i++) { 

印刷する別の方法が

size_t i = 0; 
for (const auto& v : Vektor) 
{ 
    size_t j = 0; 
    for (const auto e : v) 
    { 
     cout << "Value at " << i << " , " << j << " : " << e << endl; 
     ++j; 
    } 
    ++i; 
} 
関連する問題