下面vector迭代器如何释放元素内存呀???

mirroatl187 2014-07-29 03:13:47
#include <iostream>
using namespace std;
#include <vector>
vector<char*> v;


int _tmain(int argc, _TCHAR* argv[])
{
v.push_back(new char[10]);
v.push_back(new char[10]);
for(vector<char*>::iterator it = v.begin(); it != v.end(); )
{
delete *it;
}
return 0;
}

...全文
373 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2014-07-29
  • 打赏
  • 举报
回复
lz的代码不是异常安全的,请使用std::vector<char>或std::string来替换char*
mirroatl187 2014-07-29
  • 打赏
  • 举报
回复
是不是要用双星 才能释放一星的内存呀??????????????????
引用 7 楼 starytx 的回复:
for(vector<char*>::iterator it = v.begin(); it != v.end(); it++ ) 因为迭代器没有自增,所以多次delete首元素的地址,所以导致崩溃
mirroatl187 2014-07-29
  • 打赏
  • 举报
回复
#include <iostream> using namespace std; #include <vector> vector<char*> v; int _tmain(int argc, _TCHAR* argv[]) { v.push_back(new char[10]); v.push_back(new char[10]); for(vector<char*>::iterator it = v.begin(); it != v.end(); it++) { v.erase(it);//报错了呀。。。。。。。。。。。。。。。。。。 } return 0; }
引用 6 楼 Saleayas 的回复:
it++; delete [] *it; 如果不是结束程序,那么需要 erase。否则会出现空引用。 只需要delete[] 你 new 出来的。 vector 的内存由 vector 自己管理。
苏客达 2014-07-29
  • 打赏
  • 举报
回复
我觉着应该是 v.clear(), 或者 v.erase(...)
shmilyhwyz 2014-07-29
  • 打赏
  • 举报
回复
for(vector<char*>::iterator it = v.begin(); it != v.end(); it++) { delete [] *it; }
starytx 2014-07-29
  • 打赏
  • 举报
回复
for(vector<char*>::iterator it = v.begin(); it != v.end(); it++ ) 因为迭代器没有自增,所以多次delete首元素的地址,所以导致崩溃
Saleayas 2014-07-29
  • 打赏
  • 举报
回复
it++; delete [] *it; 如果不是结束程序,那么需要 erase。否则会出现空引用。 只需要delete[] 你 new 出来的。 vector 的内存由 vector 自己管理。
mirroatl187 2014-07-29
  • 打赏
  • 举报
回复
??????????????你能告诉我怎么改吗???
引用 3 楼 pb830 的回复:
vector在新添加存储对象的时候是使用右值引用,并不存储你这里new的内存空间,而是自己new一片空间,再将你传参里new出的空间里的值复制过去,这里已经造成了一次内存泄露。 vector不是提供了删除数据的接口么,干嘛要自己delete呢?你delete并没有减少vector里存储的对象个数,这样会出现野指针……
mirroatl187 2014-07-29
  • 打赏
  • 举报
回复
无语。。。再怎么改?????
引用 1 楼 starytx 的回复:
循环体变量没有自增 it++
  • 打赏
  • 举报
回复
vector在新添加存储对象的时候是使用右值引用,并不存储你这里new的内存空间,而是自己new一片空间,再将你传参里new出的空间里的值复制过去,这里已经造成了一次内存泄露。 vector不是提供了删除数据的接口么,干嘛要自己delete呢?你delete并没有减少vector里存储的对象个数,这样会出现野指针……
killerls 2014-07-29
  • 打赏
  • 举报
回复
记得好像有说法 new[] 和 delete[] 要配套?这里用delete会不会有问题?iterator是指向vector元素的指针(可以这么理解),对其进行*符号就是取元素本身,元素本身是char*类型(指针类型),相当于delete 一个char*类型指针。或者可以这么理解,因为vector的元素师指针,所以其iterator就可以看做指向指针的指针,类似char**,这么想就好理解了吧。
starytx 2014-07-29
  • 打赏
  • 举报
回复
循环体变量没有自增 it++

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧