如何释放动态分配的向量?

时间:2017-01-04 04:33:11

标签: c++ vector

我试图创建vector int的向量,我很困惑如何在之后释放动态分配的向量。

以下是我的代码:

vector<int> *j;
vector< vector<int> > i;  //vector of vector<int>

int c;  //offset of the number
cin.ignore();
for(int count = 0; count < cas; count++ )
{
    c = 0;
    char line[1000];
    j = new vector<int>;
    cin.getline(line, 1000);
    //tokenize the input string which separate by space “ ”
    char *p = strtok(line, " ");
    while(p != NULL)
    {
        n[c] = string(p);
        c++;
        p = strtok(NULL, " ");
    }

    //convert the string input to integer for further calculation
    for(int m = 0; m < c; m++)
    {
        (*j).push_back(atoi(n[m].c_str()));
    }
    i.push_back(*j);
}

//this is the way i try to free the allocated vector, and i get segmentation fault for this
    j = &i[0];
    delete [] j;

2 个答案:

答案 0 :(得分:3)

您不需要任何指针或newdelete。这些是在这个简单程序中没有地位的高级概念。

vector<vector<int>> i;

for (...) { 
    vector<int> j;
    // fill up j
    i.push_back(j);
}

请记住,向量向量在概念上与int向量不同。当您需要填写vector<int>时,您不会开始新的&删除&删除。使用X时,任何vector<X>也不需要这样做。

答案 1 :(得分:1)

i.push_back(*j);

不推指针;它制作了矢量的副本。

一旦你完成了,你就可以

delete j;

然后。

(当然,如果您将i更改为存储指针,则故事将完全不同。)