vector erase 的问题

chenqing1985 2008-12-28 01:25:15
vector<int*> vectTest;
for(int i=0 ;i != 10;i++)
{
int* temp = new int;
*temp = i;
vectTest.push_back(temp);
}
for(vector<int*>::iterate iter = vectTest.begin() ;i != vectTest.end();)
{
delete *iter;
iter = vectTest.erase(iter);
}
这样子用erase对吗?
我想问new了一个指针~delete删除的时候没有置为NULL不是会产生野指针吗?
这里erase的时候是根据什么来判断是哪个元素的呢?地址吗?
...全文
186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenqing1985 的帖子:]
vector <int*> vectTest;
for(int i=0 ;i != 10;i++)
{
int* temp = new int;
*temp = i;
vectTest.push_back(temp);
}
for(vector <int*>::iterate iter = vectTest.begin() ;i != vectTest.end();)
{
delete *iter;
iter = vectTest.erase(iter);
}
这样子用erase对吗?
我想问new了一个指针~delete删除的时候没有置为NULL不是会产生野指针吗?
这里erase的时候是根据什么来判断…
[/Quote]

可以的,你这个指针都无法在外面用,野指针的问题也几乎不会出现吧

erase的时候是根据vector里面的对象的迭代器来删除的啊,指向的被删除返回下个迭代器
lzr4304061988012 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenqing1985 的回复:]
请教2楼
你的意思就是这里就是根据地址来确定删哪个元素是吧~所以不能先指空(不知道我理解的对不对)。
那为什么这里不会出现野指针呢?
[/Quote]
一般delete指针后要赋予NULL,以防出现野指针,但是在这里关系不大,因为你基本已经找不到这个指针了,所以不会出现引用错误。
chenqing1985 2008-12-28
  • 打赏
  • 举报
回复
了解了~谢谢各位了~结贴
nullah 2008-12-28
  • 打赏
  • 举报
回复
我想问new了一个指针~delete删除的时候没有置为NULL不是会产生野指针吗?
会产生 楼主delete *iter实际上释放了vector中的元素指向的内存 释放后已经为野指针了
但是后面你用erase删除了这个指针变量
这里erase的时候是根据什么来判断是哪个元素的呢?地址吗?
根据你的迭代器
hityct1 2008-12-28
  • 打赏
  • 举报
回复

int main()
{
vector <int*> vectTest;
for(int i=0 ;i != 10;i++)
{
int* temp = new int;
*temp = i;
vectTest.push_back(temp);
}

for(vector <int*>::iterator iter = vectTest.begin(); iter != vectTest.end(); )
{
delete *iter; //删除new申请的空间
*iter = NULL;
iter = vectTest.erase(iter);//删除vector的元素
}

return 0;
}
chenqing1985 2008-12-28
  • 打赏
  • 举报
回复
回5楼
你说的
不去用就没关系,最好显示赋值为NULL
显示赋值为NULL 这样
delete *iter;
iter == NULL;
iter = vectTest.erase(iter);
这样iter 为NULL了,那怎么erase呢?
xiaoyisnail 2008-12-28
  • 打赏
  • 举报
回复
delete *iter; 释放vector里指针所指向的内存
iter = vectTest.erase(iter); 从vector里删除iter指向的元素
是正确的

这样子用erase对吗? 对的
我想问new了一个指针~delete删除的时候没有置为NULL不是会产生野指针吗? 不去用就没关系,最好显示赋值为NULL
这里erase的时候是根据什么来判断是哪个元素的呢?地址吗?根据iter这个迭代器啊
chenqing1985 2008-12-28
  • 打赏
  • 举报
回复
请教2楼
你的意思就是这里就是根据地址来确定删哪个元素是吧~所以不能先指空(不知道我理解的对不对)。
那为什么这里不会出现野指针呢?
smdszgzh 2008-12-28
  • 打赏
  • 举报
回复
erase是根据跌迭器来判断删除那个元素的!
指针delete后,让它指向空,认为是安全的,防止别人再用!
  • 打赏
  • 举报
回复
不会
根据iter确定删那个元素
ouyh12345 2008-12-28
  • 打赏
  • 举报
回复
delete *iter;
删除迭代器指向的元素,并不是删除迭代器本身

65,210

社区成员

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

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