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
[40806] Re:답답해서 다시한번 배열에 관한 질문을 올립니다.
마술감자 [magicpotato] 747 읽음    2005-06-29 13:12
배열인 경우에 new던 아니던 상관이 없는것은 분명합니다.
정확히 어느 부분을 봐야 할지 몰라서 소스를 대충 훑어 봤는데..

AThread-> 같은것이 눈에 띄네요.
저게 쓰레드로 작동되거나, 내부적으로 비동기 소켓인 경우
이하의 버퍼에 접근하는 코드는 제대로 작동하지 않습니다.

아래 코드가 제대로 작동하지 않으면서 쓰레드로 넘어간 320이라는 값이 변형됐을수도 있구요.
어디까지나 추측이지만 그쪽이 완벽히 되는지도 검토해 보시면 좋겠네요.

받는 부분과 파싱하는 부분 사이에 SleepEx()를 3초 정도 돌린다음 해보시고 잘 되면
쓰레드/비동기 문제입니다.


다꾸엔젤 님이 쓰신 글 :
: 몇일동안 삽질하다가 결국은 도저히 이해가 가질 않습니다.
:
: 지금까지 별의별 방법을 다써도 여전히 쓰레기 값이 올라가는군요..
:
: 답답해서 프로그램을 통째로 올립니다.
:
: 다소 허접한 프로그램이지만 제가 BC++을 입문한지 얼마되지 않아서..^^
:
: 일단 프로그램의 개요는 이렇습니다.
:
: 소켓통신으로 320바이트 만큼 읽어옵니다.
:
: 읽어오는 값은
:
: "95                                                                                  0111241111                                                                                                                                                                                                                                  "
:
: 이러한 값을 클라이언트에서 읽어옵니다.
:
: 320바이트지요...
:
: 일단 공백부분은 NULL값이 아닌 공백값(" ") 입니다.
:
: 읽어온 값중에서 0111231111이라는 값을 뽑아서 데이터 베이스에서 "#"을 토큰으로 하는 값을 뽑아옵니다.
:
: 0111231111#ABC#37.529167#126.871944#20041123133102#123456#가나다라마 바사 아자차카타
:
: 데이터베이스에서 읽어오는 값은 위와 같습니다.
:
: 위의 값을 strtok()로 짤라서 해당 배열에 넣으면
:
:         strcpy(baBill, "96");
:         strcat(baBill, "00");
:         strcat(baBill, btyrespMsg);
:         strcat(baBill, btyTelnum);
:         strcat(baBill, btyXpos);
:         strcat(baBill, btyYpos);
:         strcat(baBill, btyZipcode);
:         strcat(baBill, btyAddr);
:         strcat(baBill, btyPoiinfo);
:         strcat(baBill, btyFiller);
:
: 이 구문의 btyAddr 값에서 자꾸 쓰레기 값이 흘러 들어가는군요...
:
: 이러한 현상이 나타나는 원인과 해결 방안을 알고 싶습니다.
:
: 두번째로 분명히 배열값을 주었는데도 불구하고 320바이트의 값이 초과해 버려도 322바이트라던지 330바이트의
:
: 초과된 값이 배열에 들어가는 현상이 발생합니다.
:
: 제가 배열을
:
: byte baBill[320];
: byte btyZipcode[6];
: byte btyrespMsg[80];
: byte btyTelnum[20];
: byte btyXpos[10];
: byte btyYpos[10];
: byte btyAddr[80];
: byte btyPoiinfo[80];
: byte btyFiller[30];
:
: 이런식으로도 초기화 시켜 보았고
:
: byte *baBill= new char[320];
: byte *btyZipcode = new char[6];
: byte *btyrespMsg = new char[80];
: byte *btyTelnum = new char[20];
: byte *btyXpos = new char[10];
: byte *btyYpos = new char[10];
: byte *btyAddr = new char[80] ;
: byte *btyPoiinfo = new char[80];
: byte *btyFiller = new char[30];
:
: 위와 같은 방법으로도 초기화 시켜 보았습니다.
:
: 또한 byte가 아닌 char 형으로도 두방법 다 사용해 보았지만 별 효과가 없었습니다.
:
: 사정이 이렇다 보니 마지막에 return값을 받고 클라이언트에 write하면 값이 몇번 전송되다가 멈추어 버립니다.
:
: 디버깅해보니 read하고 해당 리턴값이 320바이트를 초과해 버리니 320바이트를 보내는데 처음은 잘 들어가고 한번 더
:
: 돌아가면서 값을 보내버리는 현상이 발생합니다.
:
: 프로그램 짜면서 이렇게 복잡하게 얽힌 문제는 처음입니다.
:
: 질문이 다소 길어졌는데 많은 의견 부탁드립니다..
:
: 몇일동안 머리가 터지겠습니다....ㅠ.ㅠ
:
: 그럼 좋은 하루 되세요...

+ -

관련 글 리스트
40800 답답해서 다시한번 배열에 관한 질문을 올립니다. 다꾸엔젤 812 2005/06/29
40842     Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 다솜돌이 947 2005/07/01
40806     Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 마술감자 747 2005/06/29
40812         Re:Re:답답해서 다시한번 배열에 관한 질문을 올립니다. 다꾸엔젤 774 2005/06/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.