2011-07-18 4 views
-3

I는 다음과 같이 작동 코드의 조각을 제로로 덮어 쓰기 :int 값은 때때로

boolQwInterface::setSomething(const A& obj, const B& Name, int Val) 
{ 
    bool ret=true; 

    LOG_MSG(msg, SIZE, "writing: %s, %s, %d", dbPtr->getDbName(), Name.getRepr().c_str(), Val); 

    if(WriteDB(dbPtr->getid(), obj.c_string(), Name.getRepr().c_str(), (void*)&Val)<0) 
    { 
     LOG_MSG(msg, SIZE, "failed: %s", Name.getRepr().c_str()); 
     ret=false; 
    } 
    .... 
} 

문제는 발신자가 40 같은 일부 정품 값을 전달하더라도 0으로 덮어지고 "발"입니다 그래서. 때로는 호출자가 전달하는 올바른 값 (40 정도)을 취합니다. 그렇지 않으면 값 40이 전달되지만 0으로 간주합니다. 이것에 대한 의견이 있으십니까? 참조로 전달해야 할 수도 있습니까?

+1

'dbPtr-> getDbName()'은'char *'또는'std :: string &'(또는 다른 것)을 반환합니까? –

+0

또한 코드에서 Val이 손상된 지점을 알려 주어야합니다. LOG_MSG가 예상 출력을 제공하지 않습니까? print 문을 사용하여 코드 행이 예상치 못한 Val 변경 결과를 발견하면 해당 행을 표시해야합니다. –

+1

다음을 명확히 해두 고 setSomething을 Val (40) (아마도)로 호출하십시오. LOG_MSG는 로그의 값으로 40을 출력합니다. LOG_MSG는 setSomething에 대한 전달을 사용하거나 아마도 const 참조입니다. WriteDB는 때때로 Val의 값을 편집합니까? –

답변

1

저는 답안 상자를 사용하고 있습니다.이 질문은 개행을 사용하여 설명하기가 쉽기 때문에 사용하고 있습니다. 당신은 정말 그렇게 많이 밖으로 당신을 도울 충분한 정보를 제공하지 않은

bool setSomething(int Val) { 
    FunctionOne(Val); 
    FunctionTwo(&Val); 
    .... 
} 

:

코드의 흥미로운 부분

는 감소 될 수있다.

+0

FunctionOne (Val); setSomething을 val = 40으로 호출하면 0으로 인쇄됩니다. setSomething을 다음과 같이 설정해야합니까? bool setSomething (int & Val) 우리가이 값을 인쇄하려고 할 때 setSomething 함수 밖에서 0으로 표시되기 때문에! – Rahul

+0

자, setSomething (....) 호출자가 있습니다. 부호없는 정수 int val; setSomething (name1, name2, static_cast (val); – Rahul