2015-01-27 4 views
1

return 문이 else 내에있을 때 액세스 위반 읽기 위치 오류 만 반환하는 함수가 있지만 else 외부에있을 때 오류가 발생하지 않지만 때때로 다음과 같은 반환 값을 얻습니다. 코드로 인해서는 안됩니다. 이 코드는 다음과 같습니다.함수 액세스 위반 위치 읽기

void askUser(){ 
    std::cout << "Level: "; 
    std::cin >> level; 

    for (int x = 0; x < 3; x++){ 
     word = getWord(level); 
     std::cout << word << std::endl; 
    } 
} 

std::string getWord(int level){ 
    int randomNumber = rand() % 3; 
    if (usedWords[0].find(line[level - 1][randomNumber]) != usedWords[0].end()){ 
     getWord(level); 
    } 
    else{ 
     usedWords[0].insert(line[level - 1][randomNumber]); 
     return line[level - 1][randomNumber]; //returns the access violation error 
    } 
    //if the return was here no access violation but can return previous return values which shouldn't happen 
} 

정확한 오류의 원인은 확실하지 않지만 return 문과 관련이 있다고 생각합니다.

+0

이것은 실제로 재귀 적이 아니며 동일한 매개 변수를 사용하여 다시 호출합니다. 그 모든 변화는 난수입니다. 'if'는 새로운'rand()'로'while '이 될 수도 있습니다. – OJFord

+0

죄송합니다. 실수 였으므로 시험해 보겠습니다. 감사합니다. @OllieFord – Jack

+0

선, 중고 단어 등을 사용했던 변수 유형을 말씀해 주시겠습니까? – bittusarkar

답변

3

if 문에있는 조건이 참일 때 아무 것도 반환하지 않는 것이 문제입니다. 이 함수는 문자열을 반환해야한다고 말하지만 함수가 끝나기 만하면됩니다. 정의되지 않은 동작입니다.