【问题标题】:Deleting a vector of 2d arrays删除二维数组的向量
【发布时间】:2016-08-26 10:54:43
【问题描述】:

我有这个向量:

std::vector<int**> vec;

我用大小为size x size 分配给new 的二维矩阵填充这个向量(我检查了保存在向量中的矩阵中的值,它们是正确的)

    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):

我的代码有什么问题?

【问题讨论】:

  • 我不完全理解它,但我发现 this 很有趣,当你想在 c++ 中删除向量的特定列或行时

标签: c++ matrix multidimensional-array vector


【解决方案1】:

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()

【讨论】:

  • 我忘记将boardMatrices 更改为vec 对不起,我已经编辑过了。正如你所看到的,我认为删除的次数和新的一样多次。我需要使用数组而不是向量。
  • 你可以使用vector&lt;vector&lt;vector&lt;int&gt; &gt; &gt;。或者你可以使用像 Eigen 这样的矩阵库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2013-10-30
  • 2023-03-26
  • 2021-01-31
  • 1970-01-01
相关资源
最近更新 更多