2012-02-08 2 views
0

Visual C++ 2010 Express Edition을 사용하여 C++ 프로그래밍 언어로 작성한 .exe 파일을 컴파일하고 실행합니다. C++을 사용하여 루프 기반 논리를 작성하여 사용자에게 입력 할 항목 수를 물어보고 해당 항목에 제한된 질문을합니다. 항목 수 예를 들어, "몇자를 입력 하시겠습니까?"라고 출력하고 싶습니다. 사용자가 대답을 '3'으로 지정하고 int 변수 'entries'에 저장되어 있다고 가정 해 봅시다. 그런 다음 질문을 계속하기 전에 3 번 질문하고 코드의 다음 줄을 계속 진행합니다.Visual C++ - 런타임 검사 실패 # 3 - 변수가 초기화되지 않았습니다.

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    cout << "How many values do you need to enter?: "; 
    int entries; 
    cin >> entries; 
    int offset, number; 
    string valueName[50]; 
    float valueValue[50]; 
    for (offset = 0; offset < entries; offset++) 
    { 
     cout << "Enter " << number << " Value Name: "; 
     cin >> valueName[offset]; 
     cout << "Enter " << valueName[offset] << "\'s value: "; 
     cin >> valueValue[offset]; 
     for (number = 1; number <= entries; number++) 
     { 
     } 
    } 
    char response; 
    cin >> response; 
    return 0; 
} 

을 나는이 간단한 프로그램을 실행할 때 이상하게도, 그것이 내가 값의 이름을 입력 할 때의 0 번째 요소에 삽입 실패 : 여기 내가 뭐하는 거지 설명하는 코드의 블록은, 당신이 이해 바랍니다 valueName [] 배열. 그냥 프로그램의 실행을 일시 중지하고 "Runtime Check Failure # 3 - 변수 번호가 초기화되지 않고 사용 중입니다!"라는 대화 상자가 나타납니다. 이 프로그램에 관한 또 다른 문제점은 꽤 오랫동안이 프로그램을 실행했을 때 "Runtime Check Failure # 3"상자가 나타나지 않았고 숫자가 잘못되었을 때 처음으로 1로 시작했고, 다음 루프가 6으로 점프하고, 다음 루프를 위해 다시 6을 반복합니다!
도와주세요! 나는 온라인으로이 문제를 도둑 맞은 곳을 조사했지만, 문제의 유형에는 적용되지 않는다!
변수가 범위를 벗어 났기 때문에 그렇습니까?
하지만 for 루프 외부에서 선언되었습니다.

제발 도와주세요!

+0

범위를 벗어난 항목이 있으면 컴파일러가 만족스럽지 않습니다. 런타임 오류가 발생하면 컴파일 단계를 통과 한 것입니다. 구문 학적으로 모든 것이 정확합니다. – Mahesh

+0

디버거에 메시지가 도착했을 때 디버깅을 중단하면 초기화되지 않은 변수를 사용하여 줄 오른쪽에 있습니다. 또한, 빌드는 경고를 주어야합니다 :'경고 C4700 : 초기화되지 않은 지역 변수 'number'used'이 모든 것은 여러분에게 문제가 어디서 어디서 발생했는지 정확하게 알려줍니다. –

+0

당신의 통찰력에 대해 Mahesh와 Michael Burr에게 감사드립니다. 당신과 다른 사람들의 협조 덕분에 문제가 해결되었음을 알려드립니다. 고맙습니다. –

답변

5

런타임에서 진실을 말하면서 숫자를 int로 선언했지만 값을주지 않으면 다음 행이 나옵니다. 코드에서

cout << "Enter " << number << " Value Name: "; 

당신은 C++에서 예를 들어,이 날 2의 int를주는 것을 의미하지만, 값이 아직 정의되지 않은, 다음과 같은 선언 이런 일에

int offset, number; 

변경을 ..

int offset = 0; 
int number = 0; 
+0

'eggbox'에 협조 해 주셔서 감사합니다. 당신과 다른 사람들의 의견 덕분에 문제가 해결되었음을 알려드립니다. –

2

변수 number을 먼저 할당하지 않고 인쇄하고 있습니다. 즉, 초기화되지 않았습니다.입니다. 임의의 숫자를 인쇄 할 때 프로그램을 실행할 때 메모리에있는 일이 발생하기 때문입니다. 사용하기 전에 값을 지정하십시오.

+0

당신이 말하는 말이 옳다. 그리고 당신의 의견과 많은 다른 사람들 덕분에, 나는 나의 문제를 해결할 수 있었다. 요아킴 Pileborg 대단히 감사합니다. –

2

문제는 정확하게 당신이 받고있는 오류 메시지입니다. 초기화하지 않고 변수 을 사용하고 있습니다.

cout << "Enter " << number << " Value Name: "; 

숫자 변수로 당신의 의도가 무엇인가가 아직 아무것도 초기화되지 않은 경우

당신은, 루프의 상단에, 바로 여기에 변수를 사용할 수 있습니까? 실제로 어떤 목적으로도 봉사하는 것 같지 않습니다.

cout << "Enter " << offset << " Value Name: "; 

하지만 여전히 나에게 조금 불분명 보인다 : 당신은 당신이 현재에있어 어떤 항목을 인쇄하려면, 당신은 이 같은 대신 변수를 상쇄 사용할 수 있습니다.

하지만 문제가있는 이유는 값이 초기화되지 않았기 때문에 정의되지 않은 동작이 발생했기 때문입니다.이것은 Visual Studio가 항상 그것을 잡아 내지 못하는 이유이기도합니다. 아마 항상 디버그 모드로 잡을 것이지만, 릴리스 모드에서는 거의 잡을 수 없을 것입니다. 변수를 사용하기 전에 모든 변수를 초기화해야합니다.

+0

로버트 켈리 (Robert Kelly), 지금 당분간이 문제에 협조 해 주셔서 감사합니다. 귀하와 다른 모든 사람들의 의견 덕분에 문제가 성공적으로 해결되었음을 알려드립니다. 고맙습니다. –

0

내 경우에는 extern 변수가 두 번 선언 되었기 때문입니다.

관련 문제