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++;
Надеюсь, я помог. Удачи:)