C ++删除2D矢量内的数组

时间:2018-02-21 16:00:58

标签: c++ arrays vector heap free

不幸的是我必须使用数组才能使用我复制的另一个函数。更改此功能以使用向量将超过我的头脑。所以我写了一个函数,声明堆中的一堆数组存储在一个向量中。 我现在无法在最后释放内存。

void _get_X_Y_arrays(std::vector<std::vector<float> > *voronoi, std::vector<std::vector<int*> > *rtrn)
{
    int numberPolygons = voronoi->size();

    for (int i = 0; i < numberPolygons; i++)
    {
        int *x_heap = new int[((*voronoi)[i].size()) / 2];
        int *y_heap = new int[((*voronoi)[i].size()) / 2];
        std::vector<int> x(((*voronoi)[i].size()) / 2);
        std::vector<int> y(((*voronoi)[i].size()) / 2);
        unsigned j = 0;
        int count = 0;
        for (; j < (*voronoi)[i].size(); j += 2, count++)
        {
            x[count] = (int)(*voronoi)[i][j];
            y[count] = (int)(*voronoi)[i][j + 1];

        }
        std::copy(x.begin(), x.end(), &x_heap[0]);
        std::copy(y.begin(), y.end(), &y_heap[0]);

        (*rtrn)[i].push_back(x_heap);
        (*rtrn)[i].push_back(y_heap);

    }
}

该功能运作良好,一切都像预期的那样。我写了另一个函数,以便在不再需要时释放内存:

void _cleanup(std::vector<std::vector<int*> > *rtrn)
{
    for (unsigned i = 0; i < rtrn->size(); i++)
    {
        for (unsigned j = 0; j < (*rtrn)[i].size(); j++)
        {
            delete[] rtrn[i][j][0];
            delete[] rtrn[i][j][1];
        }
    }
}

不幸的是,这导致程序崩溃。我真的不知道错误在哪里。感觉可能有一个超出范围的向量..? 只是通过观察和玩它,我无法解决这个问题。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为你有3维数组[nbpolygons] [2] [nbpoints]

您的代码:

delete[] rtrn[i][j][0]; // delete  rtrn[i][j] index 0
delete[] rtrn[i][j][1]; // delete  rtrn[i][j] (the same array) index 1
// => crash


rtrn[i].size() always egal 2 

做:

void _cleanup(std::vector<std::vector<int*> >& rtrn)
{
    for (unsigned i = 0; i < rtrn.size(); i++)
    {
        for (unsigned j = 0; j < rtrn[i].size(); j++)
        {
            delete[] rtrn[i][j];
        }
    }

}

void _cleanup(std::vector<std::vector<int*> >& rtrn)
{
    for (unsigned i = 0; i < rtrn.size(); i++)
    {
        delete[] rtrn[i][0];
        delete[] rtrn[i][1];
    }
}