2012-06-09 3 views
1

내가 코드를 작성하고 아주 이상한 문제가 발생했다가, 여기 내 C++ 코드 : 예를 들어아주 이상한 C++ 오류

#include <iostream> 
using namespace std; 

int main() 
{ 
    int qnum; 
    cin >> qnum; 
    int series[3]; 
    cin >> series[3]; 
    cout << qnum; 
} 

, 만약 I 시리즈 [3]에 대한 QNUM의 입력 2, 5, QNUM의 값은 코드를 제공해 문제의 마지막 줄에서 재정의 될 시리즈의 입력이 새에 대한 유일한 해결책은 추가 3입니다 경우에만 발생 것입니다 이처럼 QNUM하는 속성 "정적"

#include <iostream> 
using namespace std; 

int main() 
{ 
    static int qnum; 
    cin >> qnum; 
    int series[3]; 
    cin >> series[3]; 
    cout << qnum; 
} 

아이디어가 있으십니까?

+2

0부터 시작하는 C++로 계산됩니다. 따라서 일련의 마지막 유효한 인덱스는 시리즈 [2] –

+0

입니다. 모든 경고가 활성화 된 상태에서 코드를 컴파일해야합니다. 모든 괜찮은 컴파일러는 이와 같은 것에 대해 경고해야합니다. – pmr

+0

@ pmr : "괜찮은"컴파일러의 정의에 따라 달라집니다. GCC는'-Wall -Wextra '를 가지고 있지 않다. (아마도 이것을 탐지 할 수있는 좀 더 애매한 깃발이있다. –

답변

11

series[3]가 없습니다. series[0], series[1]series[2] (배열은 0에서 N-1까지입니다) 만 있습니다.

배열의 끝에 쓰고 있습니다. 이로 인해 정의되지 않은 동작이 발생합니다.

+0

대답 해 주셔서 감사합니다. 나는 초보자입니다. 어리석은 질문을해서 유감입니다. –

+0

오 스냅 샷, 버퍼가 어딘가에 덮어 쓰는 것을 알았지 만 3 카운트 배열의 네 번째 요소에 쓰는 것을 알지 못했습니다. – Zoey