2012-02-20 2 views
1

하나의 C 코드가 있습니다. 배열 인덱스를 12.But으로 지정했기 때문에 인덱스를 벗어난 인덱스에 오류를주는 대신 해당 인덱스를 더 많이 초기화 할 수있게되었습니다. 아무도 저에게 설명 할 수 있습니까?C 언어 + 2 차원 배열

int vas1[12][12]; 
    vas1[15][15]=0; 

    int i,j; 
    for (i = 0; i < 15; i ++) 
    { 
     for (j = 0; j < 15; j ++) { 
      printf("i=%d j=%d vas=%d",i,j,vas1[i][j]); 

     } 
    } 

printf("Success"); 

감사

C

답변

5

배열이 액세스에 확인 경계를하지 않습니다. 불법적 인 액세스를 "정의되지 않은 동작"으로 표시하기 만하므로 각 구현이 원하는대로 수행 할 수 있습니다. C를 사용하면 무엇을하고 있는지 알 수 있으므로 C는 shoot yourself in the foot을 허용합니다.

실제로는 때때로 오류가 발생하는 경우가 있습니다. 때로는 오류가 발생하지 않지만 클라이언트는 오류가 발생합니다. 최악의 시나리오 : 오류는 발생하지 않지만 프로그램은 (이상한 이유로 값을 변경하는 변수) 등의 동작을합니다.

+0

[ "C로하면 발에서 쉽게 쏘을 수 있고 C++에서는 더 힘들어 지지만 그렇게하면 다리가 날아간 다."] (http://www2.research.att.com/~bs/) bs_faq.html # really-say-that) – Lundin