vector erase iterator 内存异常

dsniff 2008-11-03 07:47:14
动态分配内存后,塞入vector容器中,现在想删除该容器中部分,但是erase 迭代器时出现了内存异常
typedef struct
{
int index; //匹配的词串索引
float Score; //差异度得分,值越小表示与模式串越匹配
int bestpos; //匹配的位置
int beststartpos; //匹配的起始位置
}SongScore;

struct RsltCand
{
string result;
vector<SongScore*> vctCand;
};

//增加
vector<RsltCand> vctResult;
for()
{
vector<SongScore*> vctCand;
for()
{
SongScore *songscore = new SongScore;
//do something
vctCand.push_back(songscore);
}
vctResult.push_back(vctCand);
}
//删除
for (vector<RsltCand >::iterator it = vctResult.begin();it!= vctResult.end();)
{
// do something here
// now erase iterator
else
{
for (vector<SongScore*>::iterator ip = it->vctCand.begin(); ip!= it->vctCand.end();++ip )
{
delete *ip; //删除动态分配的内存,正常,内存无变化
}
it = vctResult.erase(it); //内容删除正常,但内存异常增加200K
}
}
...全文
376 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
游戏开发狗 2009-11-27
  • 打赏
  • 举报
回复
vector <RsltCand> vctResult;
vector <SongScore*> vctCand;
...
vctResult.push_back(vctCand);

类型不一样,push_back(vctCand)有什么目的,我发现编译不通过
xxgamexx 2008-11-06
  • 打赏
  • 举报
回复

for (vector <SongScore*>::iterator ip = it->vctCand.begin(); ip!= it->vctCand.end();++ip )


改成


for (vector <SongScore*>::iterator ip = it->vctCand.begin(); ip!= it->vctCand.end();ip++ )


试试~
dsniff 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 e_sharp 的回复:]
内存异常增加200K

----------------

哪里看到的?
[/Quote]
任务管理器……暴增的厉害,郁闷
写了个测试程序,按照先前的方式删除,没有任何问题,内存也是降下来的。
最后猥琐的使用了定义了一个vector,push_back那些不删除的元素,最后swap过来……
kingsun555 2008-11-05
  • 打赏
  • 举报
回复
先用REMOVE再用ERASE

vec.erase( remove( vec.begin(), vec.end(), elem_need_deleted ) ) ;
e_sharp 2008-11-05
  • 打赏
  • 举报
回复
内存异常增加200K

----------------

哪里看到的?
ericli981 2008-11-05
  • 打赏
  • 举报
回复
看程序本身好像没有什么问题,不明白为什么内存会增长

关注下
dsniff 2008-11-05
  • 打赏
  • 举报
回复
不管迭代器的事,删除时迭代器是重新定义了的:
for (vector <RsltCand >::iterator it = vctResult.begin();it!= vctResult.end();)
{
// do something here
// now erase iterator
else
{
for (vector <SongScore*>::iterator ip = it->vctCand.begin(); ip!= it->vctCand.end();++ip )
{
delete *ip; //删除动态分配的内存,正常,内存无变化
}
it = vctResult.erase(it); //内容删除正常,但内存异常增加
}
AlwaysSLH 2008-11-05
  • 打赏
  • 举报
回复
vector的自动增长可能造成内存重置,导致迭代器失效
dsniff 2008-11-05
  • 打赏
  • 举报
回复
大哥,代码本身没有错误好不好?
for循环中无内容而已
P_ghost 2008-11-03
  • 打赏
  • 举报
回复
一堆错误的代码,整理好了再发吧

65,186

社区成员

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

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