2015-12-22 80 views
2

我不断收到以下错误:Microsoft C++异常:std :: out_of_range错误?

Unhandled exception at 0x74BDD8A8 in FileName.exe: Microsoft C++ exception: std::out_of_range at memory location 0x004FA55C.

我已经做了一些搜索,但我没能解决这个问题。我确实缩小了这个事实,即out of range错误来自我的string fdata变量。这里是我的代码中的错误/异常发生:

void MyClass::MyMethod10() 
{ 
    string fdata; 
    char num[100]; 
    int i = 0,k=0; 
    unsigned int m,j=0; 

    inputFile.open("sec1.txt", ios::in); 
    inputFile >> fdata; 
    while (j<fdata.length()) 
    { 
     while (fdata.at(j) != '+') 
     { 
      if (fdata.at(j) != '*' && j<fdata.length()) 
      { 
      num[k] = fdata.at(j); 
      k++; 
      } 
      else 
      { 
      num[k] = '\0'; 
      m = atoi(num); 
      //cout << m << endl; 
      MyMethod22(m); 
      k = 0; 
      } 
      j++; 
     } 
     MyMethod22(43); 
     j++; 
    } 
    inputFile.close(); 
    outputFile.open("sec2.txt", ios::out); 
    while (i<index) 
    { 
    outputFile << (char)data[i]; 
    i++; 
    } 
    outputFile.close(); 
    CleanBuffer(); 
} 

sec1.txt文件包含以下数据

25750*23084*57475*15982*+57475*15982*+13364*15982*26260*+48840*32397*13364*15982*57475*11371*21876*+25197* 

while()循环部分我的程序是能够从文件中正确读取数据。问题/错误/异常发生在我的程序从文件获取最后一个数字的地方。我猜测问题出在while()循环中,但我无法弄清楚什么是错的。我所能做的就是在从文件中读取最后一个数字后,将错误范围缩小到string fdata超出范围。我想知道有没有人能帮我解决这个问题,或者提出一些我可能错过的建议?

+0

MSVC++在调试菜单中有一个选项“断开异常”。 – MSalters

回答

6

你有实际的问题是在这里:

while (fdata.at(j) != '+') 
    { 
     ... 
     j++; 
    } 

请注意,您增加j,并尝试读取j个字符,你检查之前,如果j在范围内。要修复它,请像这样更改:

while (j < fdata.size() && fdata.at(j) != '+') 
    { 
     ... 
     j++; 
    } 
+0

谢谢@ Ishamael和@ mathematician1975 =。我的问题解决了。 – LuckyAli