簡體   English   中英

C++ 刪除二維向量內的數組

[英]C++ Delete array inside 2D vector

不幸的是,我必須使用數組才能使用我復制的另一個函數。 更改此函數以使用向量將超出我的范圍。 所以我寫了一個函數,聲明堆中的一堆數組要存儲在一個向量中。 我現在在最后釋放那段記憶時遇到了麻煩。

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];
        }
    }
}

不幸的是,這會導致程序崩潰。 我真的不知道錯誤在哪里。 感覺可能有一個超出范圍的向量..? 只是看着它並玩弄它,我無法解決這個問題。 我究竟做錯了什么?

我認為你有 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];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM