读书人

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

发布时间: 2012-02-23 22:01:35 作者: rapoo

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 才是 ...

读书人网 >C++

热点推荐