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
[37683] 왜 이런 현상이...ㅡㅡ??
이상해 [] 1113 읽음    2004-10-20 00:51
코드 가드를 이용했더니 다음과 같은 에러를 뱉어냅니다...

Error 00164. 0x100C00 (Thread 0x0CA0):
Method called on invalid object: Attempt to access 4 byte(s) at 0x00000000.
Call Tree:
   0x00414B8A(=AAAA.exe:0x01:013B8A) C:\test\EScnro.cpp#77
       ===> 에러가 EScnro에서 발생해서 AScnro까지 던져주고 있습니다...
   0x0043E67D(=AAAA.exe:0x01:03D67D) C:\test\DScnro.cpp#289
   0x004497E0(=AAAA.exe:0x01:0487E0) C:\test\CScnro.cpp#132
   0x0044A9E7(=AAAA.exe:0x01:0499E7) C:\test\BScnro.cpp#293
   0x0044A30E(=AAAA.exe:0x01:04930E) C:\test\AScnro.cpp#229
   0x400EE4E7(=vcl60.bpl:0x01:03D4E7)
------------------------------------------
위와 같은 에러를 수백개 뱉어내네요....메모리도 콸콸 세고.......-_-;;
문제는 invalid object라는 에러인데.... EScnro.cpp는 객체를 생성을 하지않고 쓰고 있습니다
여기서 제가 의문이 드는것은 객체 생성을 하지 않고 다음과 같이 사용했을때
런타임시에 객체가 없다고 에러를 뱉어야 하는데 어떻게 빌더가 에러없이 도는지 이해가 가지 않습니다...

============header 파일====================

#ifndef EScnroH
#define EScnroH

//---------------------------------------------------------------------------
class TEScnro
{
private:    // User declarations
public:        // User declarations
    __fastcall TEScnro();
    AnsiString __fastcall ShowMessage(AnsiString msg);
};
//---------------------------------------------------------------------------
extern PACKAGE TEScnro *EScnro;
//---------------------------------------------------------------------------

#endif


============cpp 파일====================
#include "EScnro.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)

TEScnro *EScnro;

__fastcall TEScnro::TEScnro()
{
}

AnsiString __fastcall TEScnro::ShowMsg(AnsiString msg)
{
    return "객체생성없이 왜 도냐?"; 
}

============================================================================

DScnro.cpp에서

    EScnro->ShowMsg("");

이렇게 사용하고 있습니다..근데 이 코드가 왜 수행이 되는거죠???

만약 일반 c처럼 생각해서 객체 없이 함수만 호출한다고 한다면...

TEScnro *EScnro; ==>   TEScnro EScnro; 이렇게 포인터 없이 사용해야하는거 아닌가요??(struct 사용할때처럼...)
그리고 EScnro->ShowMessage(msg); 이렇게 사용하는게 아니라
EScnro.ShowMessage(msg);로 사용하는거 아닌가요??

위와 같이 코딩하면 왜 수행이 되는지 알려주시면 감사하겠습니다...
또한 메모리 누수 현상과도 관계가 있는지요??

조그만 도움이라도 부탁합니다...ㅜㅜ

+ -

관련 글 리스트
37683 왜 이런 현상이...ㅡㅡ?? 이상해 1113 2004/10/20
37688     Re:왜 이런 현상이...ㅡㅡ?? 친구들 1029 2004/10/20
37691         Re:Re:왜 이런 현상이...ㅡㅡ?? 황경록 1044 2004/10/20
37693             Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 친구들 953 2004/10/20
37697                 Re:Re:Re:Re:인스턴스 생성 없이 호출한 멤버 함수 만복대.산수유 2340 2004/10/20
37698                     Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 친구들 914 2004/10/20
37709                         Re:Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 황경록 1052 2004/10/21
37711                             Re:Re:Re:Re:Re:Re:Re:왜 이런 현상이...ㅡㅡ?? 만복대.산수유 1260 2004/10/21
37685     Re:왜 이런 현상이...ㅡㅡ?? 남병철.레조 886 2004/10/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.