我试图创建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;
答案 0 :(得分:3)
您不需要任何指针或new
或delete
。这些是在这个简单程序中没有地位的高级概念。
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
更改为存储指针,则故事将完全不同。)