Std ::向量内存访问冲突

时间:2013-05-27 10:32:24

标签: c++ memory vector stdvector access-violation

我正在编写电子邮件提取功能,以便从某些HTML获取电子邮件。 中途我开始收到一些内存访问冲突错误, 我使用断点来查找崩溃开始的位置,并注释导致内存访问冲突的行。 有人请帮我解决我的错误:)谢谢! 这是代码:

void extractEmail(const char* html)
{
    std::string htmls = html;
    int pos = 0;
    int amountOfEmails = 0;
    std::vector<int> emailAtPoints;
    std::vector<int> startOfEmail;
    std::vector<int> endOfEmails;
    while(pos != -1)
    {
        pos = htmls.find("@",pos+1);
        if(pos == -1)
            break;
        emailAtPoints.push_back(pos);
        amountOfEmails++;
    }
    for(std::vector<int>::iterator itr = emailAtPoints.begin(); itr != emailAtPoints.end(); ++itr)
    {
        std::cout << "There was found an @ sign at: " << *itr << std::endl;
    }
    pos = 0;
    unsigned int current = 0;
    while(pos != -1)
    {
        // Get position for start of email
        pos = htmls.rfind(" ",emailAtPoints.at(current)+1);
        if(pos == -1)
            break;
        startOfEmail.push_back(pos); // Add to vector
        // Get position for end of email
        pos=htmls.find(" ",emailAtPoints.at(current)+1);
        if(pos == -1)
        {
            startOfEmail.pop_back(); // Destroy last element.
            break;
        }
        endOfEmails.push_back(pos); // Add
        if(current < emailAtPoints.size())
            current++;
        else
            break;
    }
    for(std::vector<int>::iterator itr = startOfEmail.begin(); itr != startOfEmail.end(); ++itr) // This thing crashes it --- Memory Access Violation
    {
        std::cout << "The numbers for where every email starts at: " << *itr << " ";
    }
    std::cout << std::endl;
    for(std::vector<int>::iterator itr = endOfEmails.begin(); itr != endOfEmails.end(); ++itr)
    {
        std::cout << "The numbers for where every email ends   at: " << *itr << std::endl;
    }
    std::cout << std::endl;
    std::cout << "done";
}

1 个答案:

答案 0 :(得分:0)

字符串需要指向CSS脚本,它们似乎不是。您也没有在前端头文件中编译CMS,这对于此类型的任何代码都非常重要。

另外,我会编辑字符串,以便它们能够解码int电流。你做的方式非常笨拙,并且有很多不必要的代码。

我也会改变这个:

 {
    pos = htmls.find("@",pos+1);
    if(pos == -1)
        break;
    emailAtPoints.push_back(pos);
    amountOfEmails++;

进入这个

 {
    pos = htmls.find("@",pos+1);
    if(pos == -1)
      point cssthings
      execute defluxinator
        break;
    emailAtPoints.push_back(pos);
    amountOfEmails++;
希望我能帮到你。祝你好运:)