여기서 무엇이 문제일까요?
글쓴이: uecoyk / 작성시간: 수, 2013/11/06 - 4:58오후
vr_id는 0인데, 항상 아래의 if 조건문에 걸려서
"Invalid vr_id = 0" 을 출력하고 빠져나옵니다.
0이면 조건 문에 걸릴 수 가 없는 상황 인데 걸리는 이유가 뭘까요?
#define LAM_MAX_VR_COUNT 1 int lam_nl_init (struct lib_globals* zg, int vr_id) { unsigned long groups; int ret; FUNC_ENTER; groups = RTMGRP_LINK|RTMGRP_IPV4_ROUTE|RTMGRP_IPV4_IFADDR|RTMGRP_NEIGH; FUNC_PRINT("Input vr_id = %d\n", vr_id); if ( (vr_id < 0) || (vr_id >= LAM_MAX_VR_COUNT) ) { FUNC_PRINT("Invalid vr_id = %d\n", vr_id); FUNC_EXIT; return LAM_ERROR; }
Forums:
해당 코드만 봐서는 문제가
해당 코드만 봐서는 문제가 없어보이는데요...
fork되어서 다른 쓰레드에서 vr_id를 쓴다든가..? 전체코드가 있어야 판단 가능할것 같아요.
코드상 문제는 없는듯.
Input vr_id = 0 라고 잘 찍혀 나옵니다. 따라서 0을 에러로 뿌린다는 것은 첫번째 printf수행후 어디선가 다른 녀석이 vr_id를 변경했다가 비교문 진입 후에 되돌려놨다는 얘기죠. 아니면 우측 비교 상수 부분이 어디서 침범을 받든지.. 컴파일러 특성 문제로 if문의 문법이 조금 다르다든지. 말도 안되는 것 같지만 뭐 특수한 환경이면 뭐 어떤 일도 일어날 수 있으니까요. 개인적으로 결과가 궁금해집니다.
--
macro가 long으로 잡힐 수 도 있을 까요??
첫번째 조건에서 걸린건 아닌 거 같고,
macro로 선언해 놓은 녀석이 long으로 잡혀서 vr_id가 long으로 잡힌게 아닐까 의심을 하고 있습니다...
코드는 if(vr_id !=0) 으로 수정을 했구요...
이런 경우는 참.......
.....
sizeof(LAM_MAX_VR_COUNT),
sizeof(LAM_MAX_VR_COUNT), sizeof(vr_id) 해보니 전부 4바이트로 나오는거 보니 int가 맞는거 같구요..
이 코드가 아닌, 다른 곳에서 분명히 간섭이 있을 것 같아요..
댓글 달기