Std:: Нарушение доступа к векторной памяти

Я пишу функцию извлечения электронной почты, чтобы получать письма от некоторых 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 ответ

Строки должны указывать на сценарий CSS, которым они не кажутся. Вы также не скомпилировали CMS в переднем заголовке, что очень важно для работы любого кода этого типа.

Кроме того, я бы отредактировал строки так, чтобы они могли декодировать внутренние токи. То, как вы это сделали, чрезвычайно неуклюже и содержит много ненужного кода.

Я также изменил бы это:

 {
    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++;

Надеюсь, я помог. Удачи:)

Другие вопросы по тегам