如何正确删除多维向量?

时间:2014-03-12 20:44:23

标签: c++ vector multidimensional-array memory-leaks

所以我正在创建两个不同的多维向量,如下所示

string **customdiceArray = new string*[crows];
for(unsigned int i = 0; i<crows;i++){
    customdiceArray[i] = new string[ccolumns];
}
然而,他们给了我内存泄漏。对于两个向量,我执行下面的删除调用。我哪里错了?

//Deallocate create objects
delete diceArray;
diceArray = 0;

//set<string>* words = new set<string>;
delete words;
words = 0;

//string **customdiceArray = new string*[crows];
delete customdiceArray;
customdiceArray = 0;

2 个答案:

答案 0 :(得分:1)

所以如果你想在这里使用删除一些例子:

对于一个变量

string *i = new string;
delete i;

对于数组(一维)

string *i = new string[10];
delete[] i;

对于数组(多维)

string **i = new *string[10]
for(int j=0; j<10;++j){
   i[j] = new string[10];
}

for(int j=0; j<10;++j){
   delete[] i[j];
}
delete[] i;

答案 1 :(得分:0)

为了避免内存泄漏并编写C ++本机代码,您还可以使用std :: vector而不是C数组,这需要更加谨慎和维护。

例如:

vector<vector<int> > matrix;

vector<int> cols;
cols.push_back(1);
cols.push_back(2);
cols.push_back(3);

matrix.push_back(cols);
matrix.push_back(cols);

for(int i=0; i<matrix.size(); i++)
  for(int j=0; j<cols.size(); j++)
    cout << matrix[i][j] << endl;

结果:

1
2
3
1
2
3