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
[29192] [답변] 프로그램이 죽는 이유...해미 경험담...아마도 같은 경우..
정성훈.해미 [sage5nor] 1570 읽음    2004-03-26 20:27
소스를 보니 어디서 그러는지 알겠습니다.
제가 비슷한 경험이 있거든요...ㅋㅋ

원인은 시리얼포트에서 데이터를 읽어보면서 시작됩니다.
소스에서 보면

   unsigned char s[20];

s를 20개의 배열로 확보했는데

시리얼포트로 읽어오는 데이터가 s보다 큰 사이즈면

   ComPort3->Read(s,Count);

프로그램이 죽을수 있습니다.

왜냐하면 s의공간외의 다른 인접 공간은 대부분 프로그램의 다른 변수의 공간으로 확보되었을 것입니다.
따라서 Count가 20보다 큰 경우 시리얼에서 읽은 데이터를 다른 변수에다 써 버릴수 있습니다.
그럴경우 재수없으면 프로그램이 죽음..

방법은 간단합니다.
데이터를 읽을 때 s의 크기-1만큼(19만큼)만 읽으면 됩니다. (간단한 예외처리..)

   if(Count<sizeof(s)) ComPort3->Read(s,Count);
   else                ComPort3->Read(s,sizeof(s)-1);

여기서 더 기교를 원한다면 Count가 20 이상이면 그냥 버리는 것입니다.

지금까지 해미의 경험을 바탕으로 두서없이 적었습니다.
도움이 되셨기를 바랍니다.

그럼 이만....

-----------------------------------------------
작은 생각이 세상을 바꾼다. - 정성훈.해미 -
-----------------------------------------------


+ -

관련 글 리스트
29157 컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 강영준 977 2004/03/24
29193     Re:여러분의 열화와 같은 성원으로 해결 했습니다. 강영준 1055 2004/03/26
29192     [답변] 프로그램이 죽는 이유...해미 경험담...아마도 같은 경우.. 정성훈.해미 1570 2004/03/26
29179     Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 김시환 981 2004/03/25
29180         Re:Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 강영준 1040 2004/03/25
29181             Re:Re:Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 김시환 983 2004/03/26
29160     [답변] 예외처리가 필요할 것 같군요 정성훈.해미 1142 2004/03/24
34681         Re:[답변] 예외처리가 필요할 것 같군요 주희 999 2004/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.