C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[14144] 에휴... 내 금쪽같은 3시간.. ㅠ.ㅠ;;;
조상진 [mauri] 2470 읽음    2008-03-25 18:11
에휴.. 오늘 또 허접한 실수한건해서.. ㅠ.ㅠ;;
넋두리나 하려고 들렀습니다.. 흑흑..

typedef struct {
    BYTE byOffset0;       
    BYTE byOffset1;       
    BYTE byOffset2;       
}ST_ZGLN;
typedef struct {
    ST_ZGLN ZglnR;        
    ST_ZGLN ZglnL;        
    WORD wHostIF;         
    BYTE byHostIFStatus[5];
    BYTE byResv1;         
    BYTE bySTCount;       
    DWORD dwOldR;         
    DWORD dwOldL;         
    BYTE bySum;           
}ST_ALIVE_INFO;

철도 제어를 할때 각 장치들의 고장 정보나 특발(먼저 통과시킬 열차)정보 간격조정 등등의 정보를 주고 받습니다.
드디어 오늘!! 위의 생존정보(?) 만 작성하면 끝이었지요...

각 장치가 살았니~ 죽었니~ 정보를 5초 단위로 보내는데 구조를 저렇게 짰습니다.
으샤으샤~ 만들어.. 우와 ~! 드디어 끝이다!!! 라고 기뻐하며 시뮬레이터를 가동시켰더니..

어라.. 다들 죽었다고 나오네요... ㅡㅡ;
로그레벨을 변경해서 로그를 찍어보니 이상하게도 헤더의 체크섬정보를 엉뚱한데서 얻어오는게 아니겠습니까!!
소스 코드를 이잡듯 뒤져도 도저히 나오지가 않는 겁니다!!!

이런 XXXX에 XXX해서 XX했다가 XXXXX할!!!! 이라며 머리를 쥐어뜯으며 절규를 2시간여 했습니다..;;


원인을 찾고보니..;;
sizeof(ST_ALIVE_INFO)가 24바이트가 아닌 28바이트가 나와서 였습니다.;;
8바이트 단위로 끊게 옵션이 설정되어 있었거든요...;;

그러니 더욱 웃긴것은.. 다른 모든 구조체들은 운좋게도 딱 8바이트가 기적처럼 맞아 떨어지더군요..;;
뭐 BYTE단위가 많긴 하지만 송수신에 직접 사용하는 구조체가 12개인데 말입니다..;;

11개가 멀쩡하고, 유독 문제가 있는 12개째 구조체를 제일 마지막에 작성하는 덕분(?)에 토탈 3시간동안 쌩쑈를 하다보니 집에가라고 종이 치는군요.. ㅡㅡ;

애초에!!! 다른 녀석들도 안됬더라면.. 좀더 빨리 알아챘을텐데... 흙흙....ㅠㅠ

하아.. 정말 허탈합니다.. ㅠ.ㅠ;;
Lyn [tohnokanna]   2008-03-25 19:03 X
전 학교 예제 작성할때 저 상황이 한번 발생해서 =_=;; (서버랑 클라이언트랑 컴파일러가 달라서) 항상 구조체엔 push pop 을 하는 습관이 ㅜㅜ
김상구.패패루 [peperu]   2008-03-25 19:39 X
#pragma pack(1)
struct aaa {
...
};
#pragma pack()

소켓등으로 통신할땐 필수임다...
조상진 [mauri]   2008-03-26 08:50 X
패패루님//네.. 뼈저리게 느꼈습니다..ㅠㅠ;

+ -

관련 글 리스트
14144 에휴... 내 금쪽같은 3시간.. ㅠ.ㅠ;;; 조상진 2470 2008/03/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.