2017-12-09 19 views
0

次のコードは私にセグメンテーションフォルトを与えていますが、私は問題を理解していません。私はベクトルを使ったやり方にいくつか間違いがあると思うが、それは何か分からない。助けてください。2Dベクトルセグメンテーションフォルト

#include<iostream> 
#include<sstream> 
#include<vector> 
#include<algorithm> 

using namespace std; 

int main() 
{ 
    int T; 
    vector<int>n,m; 
    vector<vector<int> >arr; 
    int temp; 
    cin>>T; 
    for(int i=0;i<T;i++) 
    { 
     cin>>temp; 
     n.push_back(temp); 
     cin>>temp; 
     m.push_back(temp); 
     vector<int>temp_vec(temp); 
     for(int j=0;j<temp;j++) 
     { 
      int temp2; 
      cin>>temp2; 
      temp_vec[j]=(temp2); 
     } 
     sort(temp_vec.begin(),temp_vec.end()); 
     arr.push_back(temp_vec); 
     cout<<endl; 
    } 
    return(0); 
} 
+4

と同じエラーを取得している対象の特定の入力は何ですか? –

+0

@atru私はこれによってtemp_vecにいくつかのメモリを割り当てました:ベクトル temp_vec(temp);私はそれがこのように動作するはずだと思います –

+1

OK、本当です。私は正しくチェックしなかった。それでも問題を再現できるように、説明とサンプル入力を追加してください。 – atru

答えて

-2

任意の型のベクトルを宣言すると、初期化して値を入れない限り、要素はありません。あなたのコードは:

arr.push_back(temp_vec); 

位置でベクターarrの内側に存在しないベクターにtemp_vecを挿入しようとしています。

あなたが使用したい、その後、コンストラクタの大きさであることを初期化ベクトルの大きさを知っている必要があります。例えば

vector<vector<int> >arr(size); 

vector<vector<int> >arr(64); 

これは初期化されますベクトルarrに64またはx個の空の要素が含まれています。

this

+0

答え:https://stackoverflow.com/questions/40140953/segmentation-fault-on-two-dimensional-vector –

+0

同じことが必要でない理由を説明できます –

+0

@VishalSharma私は質問の他の答えのリンクを追加しました。おそらく助けることができます。 –