조준회 님이 쓰신 글 :
:
: C/C++에선 당연한 결과입니다.
:
: 배열의 연산등에서..
: C/C++은 끝을 검사하지 않습니다.
:
: 아래코드처럼 하면.. 당연히 메모리 영역 파괴가 일어나고..
: 그 부분에 중요한 자료가 있으면.. 원하지 않는 현상이 발생합니다.
:
: 언어자체가 상당히 자유롭지만...
: 이런 경우에 대한 것은 프로그래머의 책임으로 넘기고 있습니다.
첨자의 범위를 검사하려면,
C/C++ 배열의 대체물인 ANSI C++ 라이브러리의 vector나 deque 컨테이너를 쓰면 편리합니다.
(물론 첨자의 범위를 검사하지 않으면, vector나 deque에서도 마찬가지 현상이 발생하지요.)
이에 관련한 내용을 C/C++ Tip'N Tricks에 올렸습니다. 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=29
: 조성택 님이 쓰신 글 :
: : int a[3];
: :
: : int temp;
: :
: :
: : for(temp=0;temp<10;temp++)
: : {
: : a[temp] = temp;
: : }
: :
: : for(temp=0;temp<10;temp++)
: : {
: : printf("%d\n",a[temp]);
: : }
: :
: : 이렇게 해서 출력하니 0~9까지 다 출력이 되네요..
: : 분명 a[3] 해줬는데..런타임에러도 안나고 왜 그렇죠??
: :
|