关于嵌套vector的析构有关问题
关于嵌套vector的析构问题vectorvectorwchar_t* vecUpper// constructorfor (int i 0 i 10 ++i
关于嵌套vector的析构问题
vector<vector<wchar_t*>> vecUpper;
// constructor
for (int i = 0; i < 10; ++i)
{
vector<wchar_t*> vecInner;
for (int j = 0; j < count; ++j)
{
wchar_t *pItem = new wchar_t[10];
vecInner.push_back(pItem);
}
vecUpper.push_back(vecInner);
}
// destructor
for (std::vector<vector<wchar_t*>>::iterator i = vecUpper.begin(); i != vecUpper.end(); ++i)
{
for (std::vector<wchar_t*>::iterator j = i->begin(); j != i->end(); ++j)
{
delete []*j;
}
}
代码是根据发帖时根据记忆临时写的,大体意思已经表达了。在析构的时候程序会死掉,添加计数器,发现循环执行了560次,各种诡异。。。。 vector 析构
[解决办法][code=c]namespace test{
void testIt(){
vector< vector < wchar_t*> > vecUpper;
vecUpper.resize(10);
int count=20;
// constructor
for (int i = 0; i < 10; ++i) {
vector<wchar_t*> vecInner;
for (int j = 0; j < count; ++j) {
wchar_t *pItem = new wchar_t[10];
//vecInner.push_back(pItem);
vecUpper[i].push_back(pItem);
}
//vecUpper.push_back(vecInner);
}
// destructor
for (std::vector< vector<wchar_t*> >::iterator i = vecUpper.begin(); i != vecUpper.end(); ++i) {
for (std::vector<wchar_t*>::iterator j = i->begin(); j != i->end(); ++j) {
delete []*j;
}
}
}
}
namespace test{
template <typename T>{
void testIt(){
vector< vector < wchar_t*> > vecUpper;
// vecUpper.resize(10);
int count=20;
// constructor
for (int i = 0; i < 10; ++i) {
vector<wchar_t*> vecInner;
for (int j = 0; j < count; ++j) {
wchar_t *pItem = new wchar_t[10];
vecInner.push_back(pItem);
//vecUpper[i].push_back(pItem);
}
vecUpper.push_back(vecInner);
vecInner.clear(); //加上这一句,就没有问题了!!!!!!
}
// destructor
for (std::vector< vector<wchar_t*> >::iterator i = vecUpper.begin(); i != vecUpper.end(); ++i) {
for (std::vector<wchar_t*>::iterator j = i->begin(); j != i->end(); ++j) {
delete []*j;
}
}
}
}
如此也没有问题
你的代码,每次vecUpper.push_back(vecInner);
没有清掉vecInner,所以vecInner越来越长,并且每次vecInner 都把保留上次所有指针,
于是 循环10次,vecUpper.push_back的 数据越来越多,而且重复,1~10 遍
于是 delete []*j; 的时候,很多指针被delete 1~10次;
重复 delete的时候就出错了!
[/code]
[解决办法]………………每个vecInner都是独立的,看清楚……
[解决办法]