В каком случае это if-выражение может вызвать исключение?

Видимо, когда мой код достигает этого if заявление, string subscript out of range исключение происходит.

// a is int
// str is std::string

while ( true )
{
// other stuff
if( a == str.size() ) // this line throws an exception
break;
}

В каком случае такое простое выражение if может вызвать исключение? Я просто не вижу этого. Разве это не должно просто вернуться 0 если по какой-то причине сравнение не удается?

РЕДАКТИРОВАТЬ:
Это полная функция, в которой это происходит. Он в основном читает файл и принимает значение некоторых его токенов.
И если это имеет какое-то отношение, я использую Visual Studio 2010 Express и ошибка говорит «Ошибка отладки».

void Function(string &str, int start)
{
int outline;

// Read all attributes
int pos, pos2 = start;
while( true )
{
pos = SkipWhiteSpace(str, pos2);
pos2 = FindEndOfToken(str, pos);

string token = str.substr(pos, pos2-pos);

pos = SkipWhiteSpace(str, pos2);
if( pos == str.size() || str[pos] != '=' ) break;

pos = SkipWhiteSpace(str, pos+1);
pos2 = FindEndOfToken(str, pos);
file<<"...part 3";

string value = str.substr(pos, pos2-pos);

if( token == "outline" )
outline = (short)strtol(value.c_str(), 0, 10);

if( pos == str.size() ) // <--- error here (at least, it seems so)
break;
}

SetOutline(outline);
}

И SkipWhiteSpace() а также FindEndOfToken() функции эти две.

int SkipWhiteSpace(string &str, int start)
{
UINT n = start;
while( n < str.size() )
{
char ch = str[n];
if( ch != ' ' &&
ch != '\t' &&
ch != '\r' &&
ch != '\n' )
break;

++n;
}

return n;
}

int FindEndOfToken(string &str, int start)
{
UINT n = start;
if( str[n] == '"' )
{
n++;
while( n < str.size() )
{
char ch = str[n];
if( ch == '"' )
{
// Include the last quote char in the token
++n;
break;
}
++n;
}
}
else
{
while( n < str.size() )
{
char ch = str[n];
if( ch == ' ' ||
ch == '\t' ||
ch == '\r' ||
ch == '\n' ||
ch == '=' )
break;

++n;
}
}

return n;
}

-1

Решение

Эта строка никогда не может вызвать исключение. Вы уверены, что получаете настоящее исключение C ++, а не сбой?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]