2013-05-27 106 views
-1

我正在写一个电子邮件提取函数来从某些html中获取电子邮件。 中途通过我开始获取一些内存访问冲突错误, 我使用断点来查找崩溃开始的位置并评论导致内存访问冲突的行。 有人请帮我解决我的错误:)谢谢! 下面是代码:Std ::向量存储器访问冲突

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"; 
} 

回答

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

希望我帮助。祝你好运:)

+0

任何人都可以请给我一个认真的答案? –