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
[73578] Re:TClientSocket 쓰레드 관련 문의
송신영 [palindrome] 4675 읽음    2016-04-29 09:16
생성자에서 소켓 생성할 때 Client 를 지역 변수로 선언해서 그렇습니다.
TClientSocket *Client = NULL;   // 지역변수..
Client = new TClientSocket(NULL);


그러니 생성자 함수가 종료되면 해당 지역 변수도 사라지기 때문에
fn_SockOpen()
에서 사용하고 있는 Client에는 아무 것도 생성되지 않은 NULL 입니다.
그러니 메모리 000000  번지를 참조한다고 Error 가 발생하게 되구요.
해더 파일에 TClientSocket *Client 변수가 선언되어있다면
생성자에서 TClientSocket *Client = NULL;  이 부분만 삭제하시면 될것 같습니다.

초보입니다ㅠㅠ 님이 쓰신 글 :
: 쓰레드를 추가하고 다음과 같이 구성했습니다
:
: #pragma package(smart_init)
: //---------------------------------------------------------------------------
:
: //   Important: Methods and properties of objects in VCL can only be
: //   used in a method called using Synchronize, for example:
: //
: //      Synchronize(UpdateCaption);
: //
: //   where UpdateCaption could look like:
: //
: //      void __fastcall TCP::UpdateCaption()
: //      {
: //        Form1->Caption = "Updated in a thread";
: //      }
: //---------------------------------------------------------------------------
:
: __fastcall TCP::TCP(void)
:     : TThread(false)
: {
:     this->FreeOnTerminate = false;
:     TClientSocket *Client = NULL;
:     Client = new TClientSocket(NULL);
:     Priority = tpTimeCritical;
: }
: //---------------------------------------------------------------------------
: void __fastcall TCP::Execute()
: {
:     //---- Place thread code here ----
:     while(!Terminated)
:     {
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TCP::fn_SockOpen()
: {
:
:     Client->Host = "192.168.0.142";
:     Client->Port = 5001;
:
:     if(!Client->Socket->Connected)
:     {
:         Client->Open();
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TCP::fn_SockClose()
: {
:     if(Client->Socket->Connected)
:     {
:         Client->Close();
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TCP::fn_SockSend(BYTE *SendByte, int size)
: {
:     if(Client->Socket->Connected)
:     {
:         Client->Socket->SendBuf(SendByte,size);
:     }
: }
: __fastcall TCP::~TCP()
: {
:     delete Client;
: }
:
:
:
: 메인 폼에서 b = new TCP; 이렇게 하고
: b->fn_SockOpen(); 이코드를 통해 서버에 연결 하려고 했습니다.
:
: 프로그램 실행해보면 오픈에서
: Client->Host = "192.168.0.142";
:
: 이부분에서 에러가 생기면서 프로그램이 죽네요
: 왜 도대체 저 코드라인을 가르치면서 죽는지 모르겠습니다.
:
: 첨부 파일은 코드가드가 내뿜은 메세지 입니다
:
: 테스트환경은 윈7에 빌더6.0 입니다

+ -

관련 글 리스트
73577 TClientSocket 쓰레드 관련 문의 초보입니다ㅠㅠ 4614 2016/04/28
73578     Re:TClientSocket 쓰레드 관련 문의 송신영 4675 2016/04/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.