C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54434] Re:Re:STL 에서 find 관련 질문
크레브 [kkol] 1049 읽음    2008-08-27 20:20
배열의 length overflow를 질문한것은 아닙니다.
find 함수가 원하는 값을 찾지 못했을때 last Iterator리턴하는데..
그것이 가리키는 값을 바꾸어 버리는가 하는 점이죠

find 함수 호출후 우연히 마지막 iterator 위치의 값(처음엔 쓰레기값)이 찾고자 했던 값(15)으로 바뀐것 같네요



Lyn 님이 쓰신 글 :
: 소스 자체가 오류입니다.
:
: a[10] 이라고 선언했으면 a[0]~a[9] 까지 존재하지 a[10]은 Length over 입니다
: a+10도 마찬가지구요
:
: 그리고 마지막 이터레이터는 접근하면 안되는값입니다.
: < 연산으로 끝을 점검 하기 위해 존재하는 마지막값 다음을 가르키게 되어 있거든요 ㅡ.ㅡ;
:
: 크레브 님이 쓰신 글 :
: : 요즘 STL 조금 보고 있는데..
: : 이상한 부분이 있어서 따로 질문할데도 없고해서 여기에 올립니다.
: :
: : 아래 소스 실행해 보시면
: : find 함수 실행후에  할당도 안된 메모리인 a[10] 의 내용이 변하는것을 알수 있습니다.
: : find 알고리즘이 찾은 내용이 없을때 last Iterator의 값을 바꾸어 버리는건가요?
: :
: :
 
: : //---------------------------------------------------------------------------
: : 
: : #pragma hdrstop
: : 
: : #include 
: : #include 
: : #include 
: : #include 
: : #include 
: : 
: : using namespace std;
: : 
: : 
: : 
: : //---------------------------------------------------------------------------
: : 
: : #pragma argsused
: : int main(int argc, char* argv[])
: : {
: :    int a[10] = {1, 2, 3, 4, 5 , 6, 7, 8, 9 , 10};
: : 
: :    int * ptr;
: : 
: :    printf("pointer of (a+10) = %02p\n", a+10);
: :    printf("value of (a+10) = %d\n", *(a+10));
: : 
: :    ptr = find(a , a+10, 9);
: :    printf("%02p\n", ptr);
: :    cout <<"<----result=" << *ptr << endl;
: : 
: :    ptr = find(a , a+10, 10);
: :    printf("%02p\n", ptr);
: :    cout <<"<----result=" << *ptr << endl;
: : 
: :    ptr = find(a , a+10, 15);
: :    printf("%02p\n", ptr);
: :    cout <<"<----result=" << *ptr << endl;
: : 
: :    cout <<"result=" << *ptr << endl;
: :    cout <<"result+1=" << *(ptr+1) << endl;
: :    cout <<"result+2=" << *(ptr+2) << endl;
: :    cout <<"result+3=" << *(ptr+3) << endl;
: : 
: :    printf("value of (a+10) = %d\n", *(a+10));
: :    printf("value of (ptr) = %d\n", *ptr);
: : 
: :    
: : //   list list1(a , a+10);
: : //   cout << "count=" << list1.size();
: :    //list::iterator i =
: : 
: :    getch();
: :    return 0;
: : }
: : //---------------------------------------------------------------------------
: : 
: :  

: :
: : 실행 결과
: :
 
: : 
: : pointer of (a+10) = 0013FF7C
: : value of (a+10) = 4472480
: : 0013FF74
: : <----result=9
: : 0013FF78
: : <----result=10
: : 0013FF7C
: : <----result=15
: : result=15
: : result+1=10
: : result+2=9
: : result+3=1310588
: : value of (a+10) = 15
: : value of (ptr) = 15
: :  

+ -

관련 글 리스트
54432 STL 에서 find 관련 질문 크레브 1009 2008/08/27
54434         Re:Re:STL 에서 find 관련 질문 크레브 1049 2008/08/27
54436             Re:Re:Re:STL 에서 find 관련 질문 둘리 1212 2008/08/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.