|
답변 감사합니다...위 답변을 보고 코드를 수정을 했습니다....
근데...제가 의문시되는것은 new로 생성을 하지 않은 코드가 돈다는 겁니다...
아래 코드는 project option의 autocreate form도 아닙니다...
즉, new 해주는 부분이 없습니다..그냥 function call하는것처럼 쓰고 있습니다..
물론 객체를 생성하면 Method called on invalid object라는 코드가드에서 뿌리던 메시지는 사라집니다..
지금까지 객체생성없이 잘 사용했기때문에 만약 문제가 있다면...
모든 소스를 바꾸어야 하는 문제가 생기기 때문에 저한테는 매우 중요한 문제입니다..
아무쪼록 이런 경험이 있으시면 reply감사하겠습니다...
그럼...
이상해 님이 쓰신 글 :
: 코드 가드를 이용했더니 다음과 같은 에러를 뱉어냅니다...
:
: 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 "객체생성없이 왜 도냐?";
: }
:
: ============================================================================
:
: 만약 일반 c처럼 생각해서 객체 없이 함수만 호출한다고 한다면...
:
: TEScnro *EScnro; ==> TEScnro EScnro; 이렇게 포인터 없이 사용해야하는거 아닌가요??(struct 사용할때처럼...)
: 그리고 EScnro->ShowMessage(msg); 이렇게 사용하는게 아니라
: EScnro.ShowMessage(msg);로 사용하는거 아닌가요??
:
: 위와 같이 코딩하면 왜 수행이 되는지 알려주시면 감사하겠습니다...
: 또한 메모리 누수 현상과도 관계가 있는지요??
:
: 조그만 도움이라도 부탁합니다...ㅜㅜ
|