首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vector:size()发生访问冲突解决方法

2012-02-23 
vector::size()发生访问冲突中的0x771b7bcd处未处理的异常:0xC0000005:读取位置0xffff0004时发生访问冲突。

vector::size()发生访问冲突
中的   0x771b7bcd   处未处理的异常:   0xC0000005:   读取位置   0xffff0004   时发生访问冲突   。


class     Channel    
{    
private:    
  string     name;    
  string     url;    
//...    
}    
 
vector <Channel>     m_nvector;  
vector <Channel>     m_nvectorsousuo;  
string     temp;    
//...    
vector <Channel> ::iterator     m_channeltempit;    
m_channeltempit=find_if(m_nvectorsousuo.begin(),m_nvectorsousuo.end(),    
                                                                      ChannelNameFind(temp));//没有问题    
vector <Channel> ::iterator     it=find(m_nvector.begin(),    
                                              m_nvector.end(),*m_channeltempit);    
if(it==m_nvector.end())    
{    
      m_nvector.push_back(*m_channeltempit);    
  if     (m_nvector.size()==10)//这句当m_nvector中到达10个后会有异常    
  {    
 
  }    
}    
 
m_nvector.size()==10//这句当m_nvector中到达10个后会有异常,没有到达10个的时候一点问题都没有

[解决办法]
if (m_nvector.size()==10)//这句当m_nvector中到达10个后会有异常
{ //里面的代码呢?

}
[解决办法]
m_channeltempit=find_if(m_nvectorsousuo.begin(),m_nvectorsousuo.end(),
ChannelNameFind(temp));//没有问题
vector <Channel> ::iterator it=find(m_nvector.begin(),
m_nvector.end(),*m_channeltempit);
if(it==m_nvector.end())
{
m_nvector.push_back(*m_channeltempit);
======> push_back后,原来保存的迭代器m_channeltempit可能无效,
此时*m_channeltempit非法, 并不是下面size()的问题
[解决办法]
倒是可能在 if 中使用了 it 迭代器,
这个迭代器是操作 m_nvector 的,
由于 push_back 可能导致重新分配内存,
使得迭代器失效,
这个时候使用前面:
vector <Channel> ::iterator it=find(m_nvector.begin(),
m_nvector.end(),*m_channeltempit);
这个旧的迭代器就可能有问题了 ...

不过,
看代码不应该需要使用 it 才是 ...

热点排行