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으로 간주합니다. 이것에 대한 의견이 있으십니까? 참조로 전달해야 할 수도 있습니까?
'dbPtr-> getDbName()'은'char *'또는'std :: string &'(또는 다른 것)을 반환합니까? –
또한 코드에서 Val이 손상된 지점을 알려 주어야합니다. LOG_MSG가 예상 출력을 제공하지 않습니까? print 문을 사용하여 코드 행이 예상치 못한 Val 변경 결과를 발견하면 해당 행을 표시해야합니다. –
다음을 명확히 해두 고 setSomething을 Val (40) (아마도)로 호출하십시오. LOG_MSG는 로그의 값으로 40을 출력합니다. LOG_MSG는 setSomething에 대한 전달을 사용하거나 아마도 const 참조입니다. WriteDB는 때때로 Val의 값을 편집합니까? –