2016-05-01 12 views
-1

私はこのベクトル持っている:私はnewに割り当てられたサイズsize x sizeと2Dマトリックスと、このベクトルを埋める2D配列のベクトルを削除

std::vector<int**> vec; 

を(私はベクトルに保存された行列の値をチェックし、彼らがしています正しい)

matrix = new int*[size]; 
    for (int i = 0; i < size; ++i) 
     matrix[i] = new int[size]; 

    /*here I add some values to the array and save it to the vector 
    * 
    * 
    */ 
    vec.push_back(matrix); 

    /* this I do with several matrices 

次にベクトル内の行列を削除し、ベクトルをゼロ長さに消去します。

for (int i = 0; i < vec.size(); ++i){ 
     for (int j = 0; j < size; ++j){ 
      delete[] vec[i][j]; 
     delete[] vec[i]; 
     } 
    } 
    if (vec.size() > 0) 
     vec.erase(vec.begin(), vec.end()); 

このエラーが削除原因:

double free or corruption (fasttop): 

私のコードで何が悪いのでしょうか?

答えて

0

delete[] vec[i]への呼び出しは、内部forループの内側にあります。ここで

は、それがどのように見えるべきか、次のとおりです。

for (int i = 0; i < vec.size(); ++i){ 
    for (int j = 0; j < size; ++j){ 
     delete[] vec[i][j]; 
    } 
    delete[] vec[i]; 
} 
vec.clear() 
+0

私はごめんなさい 'vec'に' boardMatrices'を変更するのを忘れ、私はまだそれを編集しました。あなたが見ることができるように、私は新しいものとして何度も削除を呼び出すと思います。私はベクトルの代わりに配列を使う必要があります。 –

+0

'vector >>'を使うことができます。あるいは、Eigenのような行列ライブラリを使うこともできます。 – sietschie