2012-10-13 2 views
1

프로그램에서이 기능을 실행하기위한 명령을 입력 할 때마다 실행되고 다음과 같이 충돌합니다.이 특정 기능을 실행 한 후 내 프로그램이 중단되는 이유는 무엇입니까?

"응용 프로그램이 비정상적으로 종료되도록 런타임을 요청했습니다."

왜 이렇게합니까?

void showInventory(player& obj) { 
    std::cout << "\nINVENTORY:\n"; 
    for(int i = 0; i < 20; i++) { 
     std::cout << obj.getItem(i); 
     i++; 
     std::cout << "\t\t\t" << obj.getItem(i) << "\n"; 
    } 
} 

std::string getItem(int i) { 
     return inventory[i]; 
    } 
+0

getItem()은 어떻게 작성됩니까? 배열에 직접 색인을 붙일 수 있습니까? 경계선을 벗어 났니? –

+2

'i'가 모든 루프 반복에서 3 번 증가한다는 사실과 관련이있을 수 있습니다. – chris

+0

문자열 ('char *')과'obj.getItem (i)'의 반환 값을 추가하고 있습니다. 아마도'+'대신에'<<'를 사용하려고했을 것입니다. – Schnouki

답변

1

:

std::string toDo(player& obj) //BY KEATON 
{ 
    std::string commands[5] = // This is the valid list of commands. 
    {"help", "inv"}; 

    std::string ans; 
    std::cout << "\nWhat do you wish to do?\n>> "; 
    std::cin >> ans; 

    if(ans == commands[0]) { 
     helpMenu(); 
     return NULL; 
    } 
    else if(ans == commands[1]) { 
     showInventory(obj); 
     return NULL; 
    } 
} 

요구가되게합니다 :

std::string toDo(player& obj) //BY KEATON 
{ 
    std::string commands[5] = // This is the valid list of commands. 
    {"help", "inv"}; 

    std::string ans; 
    std::cout << "\nWhat do you wish to do?\n>> "; 
    std::cin >> ans; 

    if(ans == commands[0]) { 
     helpMenu(); 
     return ""; 
    } 
    else if(ans == commands[1]) { 
     showInventory(obj); 
     return "";   // Needs to be '""' 
    } 
} 

신용이 스타크 프로토 타입!

0

전 = 19, 당신은 내가 20이되는 후 배열의 마지막 항목을 얻을 경계 예외

+1

그래도 끝까지 실행하면 그럴 수 없습니다. for 루프는'i = 18'과 함께 호출 될 것이고 루프의 끝에서 20이 될 것입니다. 따라서'i'는'for'에서 평가할 때 19를 치지 않습니다. 나는 똑같은 생각을 가지고 있었다. ... – tpg2114

+0

나는 당신이 지금 말하고있는 것을보고, 그것을 고쳤다. 그러나 그것은 여전히 ​​충돌한다? – Tux

+0

내가 틀 렸습니다. tpg2114 님의 댓글 1보기 – Prabhu

0
for(int i = 0; i < 20; i++) { 
    std::cout << obj.getItem(i); 

이 아주 제대로되지에서 야기한다 또 다른의 getItem이있는 경우. 마법의 숫자를 사용하지 마십시오. 대신 이런 식으로 (당신에 의해 구현 될 것입니다) 20 사용 INT listSize = obj.ListSize()

listSize = obj.ListSize(); 
    for(int i = 0; i <listSize ; i++) { 
     std::cout << obj.getItem(i); 

의 당신은 당신이 범위를 벗어난되지 않도록 할 것이다.

class player{ 
public: 
//--whatever it defines 
int ListSize() 
{ 
    return (sizeof(inventory)/sizeof(inventory[0])); 
} 
}; 

그런 다음

를 사용
void showInventory(player& obj) { // By Johnny :D 
    std::cout << "\nINVENTORY:\n"; 
    int listSize = obj.ListSize()/2; //if you are sure that is odd number 
    for(int i = 0; i < listSize; ++i) { 
     std::cout << obj.getItem(i); 
     i++; 
     std::cout << "\t\t\t" + obj.getItem(i) + "\n"; 
    } 
} 
+0

ListSize는 사용할 수있는 C++ 함수입니까? – Tux

+0

Prototype Stark이 작성한 것과 유사한 메소드를 작성해야합니다. –

0

이 함수를 작성 : 또한 당신이 (내가 왜 이유를 얻을하지 않습니다) 당신이 모시 한 루프에서이 개 항목을 인쇄하려면

이 코드에서

void showInventory(player& obj) { // By Johnny :D 
    int length = obj.ListSize(); 
    std::cout << "\nINVENTORY:\n"; 
    for(int i = 0; i < length; i++) { 
     std::cout << obj.getItem(i); 
     i++; 
     std::cout << "\t\t\t" << obj.getItem(i) << "\n"; 
    } 
} 
+0

i

+0

고마워 .-) –

+0

내 코드가 이렇게 바뀌 었습니다. 아직도 충돌합니다 ... – Tux

관련 문제