2013-05-03 1 views
0

저는 3 명의 중급 적성 프로그래머 팀에 속해 있으며 현재 새 암호화 알고리즘을 구현하기 위해 C++로 프로그램을 작성하려고합니다. 그러나 어떤 시점에서 문자열의 길이를 초과하고 있음을 나타내는 오류가 발생했습니다. 나는 이것을 디버깅하려고 노력했지만, 나는 운이 없었다. 다음 http://pastebin.com/GvvYAsKgstd :: out_of_range 오류가 C++에서 std :: string에 액세스하는 중

그것은 잘 컴파일하지만 실행에, 우리가 얻을 : 그것은 여기에 임시 main() 함수와의 소스 코드의 페이스트이다 ... 어쨌든, 그래도 혼란() 함수에

있어 오류 : 문제의

terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr Aborted

+2

디버거에서 실행하십시오. –

+2

코드를 올바르게 들여 쓰고 여기에 붙여 넣으시겠습니까? – nhahtdh

+0

거의 제쳐두고 : 자신의 암호화 기능을 작성하는 것이 좋은 생각이라고 생각합니까? –

답변

7

하나는이 라인에 : 이것은 당신이 01 액세스를 시도

for(int i = 0; i < (inPT.length() + 1); i++) 

을 의미합니다은 문자열의 끝에서 한 문자입니다. 당신은 아마도

for(int i = 0; i < inPT.length(); i++) 

또는

은 그래서 당신은 fencepost 이런 종류의 오류를 할 수 없습니다 std::for_each 같은 구성 ++보다 관용적 C를 사용하고 싶습니다. 주석에서 언급했듯이, 이것을 디버거에서 실행하면 꽤 빨리 지적 할 수 있습니다. 코드

if(modCount >= inPT.length()) 
{ 
    modCount = 0; 
} 
int mod = inKey.at(modCount);   

+1

또는 새로운 C++ 11 범위 기반 for 루프 :'for (char c : inPT) {...} ' –

+0

이로 인해 문제가 발생했습니다. 당신의 대답과 요한은 모두 정확했습니다! 많은 감사합니다! – smalltock

7

아마도이 작품은 잘못된 변수를 사용 inKey에 대한 다양한 접근의 부족에

if(modCount >= inKey.length()) 
{ 
    modCount = 0; 
} 
int mod = inKey.at(modCount);   

당신의 가드를 읽을하기위한 것입니다.

+0

아 예 :) 그 중 하나입니다! 많은 고마워, 존! – smalltock

관련 문제