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
[37675] 빌더 컴파일러만의 문제인가??
친구들 [] 733 읽음    2004-10-19 13:17
코드 가드를 이용했더니 다음과 같은 에러를 뱉어냅니다...

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 ShowMessage(AnsiString msg)
{
    return "객체생성없이 왜 도냐?"; 
}

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

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

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

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

아시는분 제발 가르쳐 주세요...급해요..ㅜ.ㅜ

+ -

관련 글 리스트
37675 빌더 컴파일러만의 문제인가?? 친구들 733 2004/10/19
37696     Re:빌더 컴파일러만의 문제인가?? 김태선 826 2004/10/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.