64,636
社区成员
发帖
与我相关
我的任务
分享
//t_point是一个类
vector <t_point> data;
for(int j=0;i <8;i++)
{
t_point *pi=new t_point(XX,XX,XX);
data.push_back(*pi); //这里神了,你push_back进入vector的是你new出来的对象的副本,
//这个循环丢掉了8*sizeof(t_point)个字节的内存
}
//之前用这样的方式操作了8次
//现在在释放内存。
for(int i=(BST->data.size())-1;i>=0;i--)
{
//这里更强,如果这个data还是上面的data的话,你就在企图delete由vector
//分配的内存,而vector很可能根本就并不是使用你的这个分配内存的机制
//(vector自己应该有管理内存的机制)
//但是因为你给delete的东西确实是一个可以进行操作的指针,编译器当然让它通过
delete &(BST->data[i]);
}
vector <t_point>::iterator ite;
for(ite=data.begin();ite!=data.end();++ite)
delete ite; //这里强到无以复加了,ite是一个vector<t_point>::iterator类型,
//对它进行delete应该是什么结果呢??
//如果data里面存储的是指针,你也该写"delete *ite"
//ite指向的对象才是可以被delete的东西啊。
vector <t_point> data;
for(int j=0;i <8;i++)
{
t_point pi=t_point(XX,XX,XX); // 为什么非得new ?
data.push_back(pi); // vector 中有默认的 alloc
}
vector <t_point*> data;
for(int j=0;i <8;i++)
{
t_point *pi=new t_point(XX,XX,XX);
data.push_back(pi);
}
...
for(int i=(BST->data.size())-1;i>=0;i--)
{
delete (BST->data[i]);
}