여기서 무엇이 문제일까요?

uecoyk의 이미지

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;
    }
익명 사용자의 이미지

해당 코드만 봐서는 문제가 없어보이는데요...
fork되어서 다른 쓰레드에서 vr_id를 쓴다든가..? 전체코드가 있어야 판단 가능할것 같아요.

mirheekl의 이미지

#include <stdio.h>
#define LAM_MAX_VR_COUNT 1
 
int lam_nl_init(int vr_id)
{
    unsigned long groups;
    int ret = 0;
 
    printf("Input vr_id = %d\n", vr_id);
    if ( (vr_id < 0) || (vr_id >= LAM_MAX_VR_COUNT) )
    {
      printf("Invalid vr_id = %d\n", vr_id);
      return 0;
    }
    return ret;
}
 
void main(void)
{
    lam_nl_init(0);
}

Input vr_id = 0 라고 잘 찍혀 나옵니다. 따라서 0을 에러로 뿌린다는 것은 첫번째 printf수행후 어디선가 다른 녀석이 vr_id를 변경했다가 비교문 진입 후에 되돌려놨다는 얘기죠. 아니면 우측 비교 상수 부분이 어디서 침범을 받든지.. 컴파일러 특성 문제로 if문의 문법이 조금 다르다든지. 말도 안되는 것 같지만 뭐 특수한 환경이면 뭐 어떤 일도 일어날 수 있으니까요. 개인적으로 결과가 궁금해집니다.

--

uecoyk의 이미지


첫번째 조건에서 걸린건 아닌 거 같고,
macro로 선언해 놓은 녀석이 long으로 잡혀서 vr_id가 long으로 잡힌게 아닐까 의심을 하고 있습니다...

코드는 if(vr_id !=0) 으로 수정을 했구요...

이런 경우는 참.......
.....

익명 사용자의 이미지

sizeof(LAM_MAX_VR_COUNT), sizeof(vr_id) 해보니 전부 4바이트로 나오는거 보니 int가 맞는거 같구요..

이 코드가 아닌, 다른 곳에서 분명히 간섭이 있을 것 같아요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.