vector保存指针问题
struct A
{
int i;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *pA = new A[10]; //动态申请
vector <A*> vtr;
for(int i=0; i <10; i++)
{
pA-> i = i;
vtr.push_back(pA); //用vector保存指针
pA++;
}
vector <A*> ::iterator first = vtr.begin();
vector <A*> ::iterator last = vtr.end();
while (first != last)
{
delete [] *first; //能否这样释放
first++; //调试时,该循环里会出错
}
}
//以上代码运行出错
//我想知道能否用vector保存指针,然后释放这些指针指向的内存
谢谢
[解决办法]
vector可以保存指针
但是记住一点:容器内的元素,均为副本
[解决办法]
while (first != last)
{
delete [] *first; //能否这样释放
first++; //调试时,该循环里会出错
}
================
既然数组new的
一句delete[] *first;即可
[解决办法]
你那样,重复delete了多次,内存在第一次执行你那条语句的时候就全释放了
写成:
struct A
{
int i;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *pA = new A[10]; //动态申请
vector <A*> vtr;
for(int i=0; i <10; i++)
{
pA-> i = i;
vtr.push_back(pA); //用vector保存指针
pA++;
}
vector <A*> ::iterator first = vtr.begin();
vector <A*> ::iterator last = vtr.end();
delete []*first;
return 0;
}
[解决办法]
A *pA = new A[10]; //动态申请
vector <A*> vtr;
for(int i=0; i <10; i++)
{
pA-> i = i;
vtr.push_back(pA); //用vector保存指针
pA++;
}
不太清楚你这段的目的 ,改成
for(int i=0; i <10; i++)
{
A *pA = new A[10];
pA-> i = i;
vtr.push_back(pA); //用vector保存指针
pA++;
}
会不会更合适点? :)
[解决办法]
vector如果想保存指针的话,请使用shared_ptr
[解决办法]
LZ还是参考taodm(taodm)所说的意见 用shared_ptr吧
[解决办法]
可以用vector保存指针,但是自己要记得处理这些指针,否则就最好使用智能指针(他们会自己处理自己的)。
[解决办法]
struct B
{
int j;
};
struct A
{
int i;
B *pB;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *pA = new A[10000];
vector <A*> vtrA;
vector <B*> vtrB;
vtrA.push_back(pA);//vector 保存指针
for(int i=0; i <10000; i++)
{
pA-> i = i;
pA-> pB = new B[pA-> i];
vtrB.push_back(pA-> pB);//vector 保存指针
pA++;
}
vector <A*> ::iterator firstA = vtrA.begin();
delete []*firstA; //释放 //改为delete *firstA; ????才能保证正确释放
vector <B*> ::iterator firstB = vtrB.begin();
vector <B*> ::iterator lastB = vtrB.end();
while (firstB != lastB)
{
delete []*firstB; //释放 //改为delete *firstB; ????才能保证正确释放
firstB++;
}
system( "pause ");
}
我觉得这个写法已经正确释放了啊。
[解决办法]
//没有,我测试没有通过,这里应该不关迭代器的事。
然而,若把 delete []*Afirst 这句放到后面,就可以了
所以我理解的是,pA,PB之间存在引用关系,总应该先释放B,再释放A吧,
你直接先把A释放了,那么,其引用的B上的对象也应该被释放了??,或者就已经泄露了,
这时候再去释放B,这块内存这时候已经不归你管了,会随机报错。
所以我觉得是释放次序问题。楼下继续
[解决办法]
晕倒....这明显的错误哦.你一次申请了10个空间,一次一次加进vector,然后一次一次的删除....