【发布时间】:2011-03-31 01:36:37
【问题描述】:
全部。我正在开发使用系统的主机文件来阻止广告的软件,但在代码上。
我有一个自定义类HostEntry,其中包含必要的信息,例如目标主机、要阻止的主机、目标主机的 ip...等。
在 HostsManager 类中,它保留一个向量来跟踪所有添加的主机。为了完全阻止主机,我必须添加example.com 和www.example.com,但是当我遍历向量时,它只会删除以“www”开头的条目。留下一个没有。如果您再次尝试删除它(只有条目缺少“www.”),它会出现段错误,我不知道为什么。
void HostsManager::delHost(std::string blockedhost) {
strip(blockedhost);
string tmp; // yes I know it's not great practice to do it like this, but it was for debug reasons
for (vector<HostEntry>::iterator viter = hosts.begin(); viter != hosts.end(); ++viter) {
tmp = viter->getHost();
if (tmp == blockedhost || tmp == ("www." + blockedhost)) {
viter = hosts.erase(viter);
}
}
}
对该特定函数的示例调用:
HostsManager mgr;
mgr.delHost("mysite.com"); // this deletes "www.mysite.com" but not "mysite.com" - whether or not you call delHost() with the "www." prefix
mgr.delHost("mysite.com"); // if you call it a second time, it segfaults O.o
非常感谢您提供帮助。
编辑:我将调用 erase() 返回的值分配给 viter,结果相同。我仍然不知道为什么会这样。
如果您需要所有代码,请访问http://paste.pocoo.org/show/363051/
【问题讨论】:
标签: c++ vector segmentation-fault