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
[47067] 슬픈 일이죠. -_-;
이경문 [gilgil] 1199 읽음    2006-11-14 15:32
에러를 내 줘야 하는데 그렇지 않으니 슬픈 일이죠. ㅎㅎ
게임 개발자는 아니구요(다른 사람인 것 같네요),
그냥 어리버리한 거 하고 있습니다. ^^

수야!╋ 님이 쓰신 글 :
: 재미 있기에는 좀 슬픈 일이 아닌가요? ㅋㅋ
:
: 개발자라면 당연히 생각했던 일이 눈앞에서 거짓부렁으로 일어나는..
:
: 단순히 엑세스 바이얼레이션만 안난다는.. -_ -; 젝일 ㅠ.ㅠ
:
: 근데 경문님은 게임 개발자신가요? 네이버 블로그에 글을 잔뜩 올리신?
:
: 동명 2인인가..
:
: 이경문 님이 쓰신 글 :
: : new, delete를 하니까 아무래도 스택이 아니고 힙 영역 같은데요,
: : 비스무리하게 코딩을 해 봤습니다.
: :
: :     char *p = (char*)malloc(1);
: :     *p = 'a'; <--- (1)
: :     free(p);
: :     *p = 'b'; <--- (2)
: :
: : (2)에서 에러(Access Violation Error)가 나지 않네요. 흐미~ -_-;
: :
: :
: : 수야!╋ 님이 쓰신 글 :
: : : 감자 땅큐.
: : :
: : : 근데 TTwo에서 다른 함수를 구현해서 이지랄 저지랄 다 떨어도
: : : 겁나 정상적으로 동작되는건 이미 그 동작에 대한게 메모리에 적제된 상태라 그런건가?
: : :
: : : 그런이론으로 따지면 상당히 안전한 소스라는? ㅡ_ㅡ?
: : :
: : : 마술감자.명국진 님이 쓰신 글 :
: : : : 일단 되는거긴 한데 되면 안되는게 맞죠 -.-;
: : : :
: : : : int a[1];
: : : : printf("%d", a[2]); 와 비슷한 코드랄까...
: : : :
: : : : 엑세스 바이올레이션이 발생하는 경우는
: : : : TOne *p = new TOne;
: : : : p = p+1;
: : : : delete p; // 할당되지 않은 영역을 제거하려고 하거나
: : : :
: : : : TOne *p = (TOne *)0x12345678;
: : : : p->m_nIndex = 2; // '완전' 말도 안되는 주소를 읽거나 쓰려고 하는 경우
: : : :
: : : : 아래와 같은 코드는 '다른 프로세스'가 할당한 메모리 영역을 침범 하는것이 아니기 때문에
: : : : OS에서 엑세스 바이올레이션으로 취급하지 않는것으로 알고 있습니다 ~_~
: : : :
: : : : 조금 다른 측면으로 보면 class의 주소값은 뭐가 되도 왠만하면 돌아가기 때문에..
: : : : (할당 된 영역이든 아니든) 아래와 같은 코드가 가능하죵..
: : : :
: : : : struct data
: : : : {
: : : :     int a, b, c;
: : : : };
: : : :
: : : : class handler
: : : : {
: : : : private:
: : : :     int a, b, c;
: : : : public:
: : : :     char * GetABC()
: : : :     {
: : : :         static char buf[32];
: : : :         swprintf(buf, "%d %d %d", a, b, c);
: : : :         return buf;
: : : :     }
: : : : };
: : : :
: : : : ----사용코드----
: : : : struct data d = { 1, 2, 3 };
: : : : handler *h = (handler *)&d;
: : : : Caption = h->GetABC();
: : : :
: : : :
: : : :
: : : : 수야!╋ 님이 쓰신 글 :
: : : : : 수야!╋랍니다.
: : : : :
: : : : : C++ 근간이 흔들리는 사태를 발견하여 이렇게 질문하게 되었습니다.
: : : : :
: : : : : 디스어셈블리 해보면 알 수 있을꺼라고 하는데 안타깝게도 제가 어셈블리를 모르는 터라 도움을 구하고자 합니다.
: : : : :
: : : : : 우선 코드를 올리도록 하겠습니다.
: : : : :
: : : : : 소스는 테스트를 위해 작성한 것이며 원래는 TOne는 SingleTon을 상속받아 생성한 클래스입니다.
: : : : :
: : : : : class TOne
: : : : : {
: : : : : public:
: : : : :     TOne() { m_nIndex = 0; }
: : : : :     virtual ~TOne() {}
: : : : :
: : : : :     int GetIndex() { return m_nIndex; }
: : : : :
: : : : : protected:
: : : : :     int    m_nIndex;
: : : : :
: : : : : };
: : : : :
: : : : : class TTwo : public TOne
: : : : : {
: : : : : public:
: : : : :     TTwo() {}
: : : : :     virtual ~TTwo() {}
: : : : :
: : : : :     int GetNextIndex() { return ++m_nIndex; }
: : : : :
: : : : : };
: : : : :
: : : : : TOne *pOne = new TOne();
: : : : : TTwo *pTwo = ( TTwo* ) pOne;
: : : : : delete pOne;
: : : : : pOne = NULL;
: : : : : pTwo->GetNextIndex();
: : : : :
: : : : : 위와같이 두 클래스가 존재하며 1은 2를 상속받았습니다.
: : : : :
: : : : : 모두 인라인 처리하였으나 위에 달리 적기 번거롭기 때문입니다. 인라인처리를 하지 않아도 결과는 같습니다.
: : : : :
: : : : : 1을 생성하여 2에 캐스팅하여 포인터를 넘겼고 또 1를 소거하여 NULL까지 넣었습니다.
: : : : :
: : : : : 제 머리에서는 당연히 pTwo의 GetnextIndex() 호출은 당연히 메모리 엑세스 바이얼레이션이라 생각하는데
: : : : :
: : : : : 그렇지 않습니다.
: : : : :
: : : : : 테스트한 버전은 빌더 5, 6 두개와 Visual C++ 2003, 6.0 총 4개 버전입니다.
: : : : :
: : : : : 모두 정상적으로 아주 정상적으로 동작되고 있습니다.
: : : : :
: : : : : 어찌 이런 결과가 나타나며 코드의 안정성과 캐스팅에 대한 견해등 관련된 이야기를 듣고싶습니다.
: : : : :
: : : : : 아주 작은 부분까지도 아시는부분이 있다면 적어주시면 좋겠습니다.
: : : : :
: : : : :
: : : : : 감사합니다.

+ -

관련 글 리스트
47059 메모리 엑세스문제 - 고수님의 관심이 필요해요 수야!╋ 1167 2006/11/14
47068     Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 김상구.패패루 1284 2006/11/14
47069         Re:Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 수야!╋ 1184 2006/11/14
47073             Re:Re:Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 마술감자.명국진 1289 2006/11/14
47060     Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 마술감자.명국진 1189 2006/11/14
47061         Re:Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 수야!╋ 1102 2006/11/14
47065             Re:Re:Re:메모리 엑세스문제 - 고수님의 관심이 필요해요 마술감자.명국진 1195 2006/11/14
47064             재미있는 글이네요. ^^ 이경문 1133 2006/11/14
47110                 Re:재미있는 글이네요. ^^ 외랑 1147 2006/11/16
47116                     Re:Re:재미있는 글이네요. ^^ 마술감자.명국진 1107 2006/11/16
47066                 Re:재미있는 글이네요. ^^ 수야!╋ 1105 2006/11/14
47067                     슬픈 일이죠. -_-; 이경문 1199 2006/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.