이 특별한 Coverity 정적 분석 검사기는 특정 값에 오버플로 될 수있는 작업 (설명에 제공하려고하는 예제)과 잠재적으로 잘린 값의 안전하지 않은 사용이라는 두 가지를 찾고 있습니다.
UI에는 무언가가 표시된 이유를 설명하는 "이벤트"가 표시됩니다. 매뉴얼은 각 이벤트의 의미를 설명합니다. 귀하가 찾고자하는 두 가지 사건은 첫 번째 사건의 경우 "잘라 내기"또는 "오버플로"이고 두 번째 사건의 경우 "오버플로 싱크"입니다.
코드 조각 이중 변환 문자열 상수를 곱한 후 다른 두 할당되어 있음을 보여준다. 어쩌면 문제가 없을 수도 있지만, "오버 플로우 된 반환 값"이라는 제목은이 함수에서이 값을 반환하는 두 번째 이벤트가 있음을 알려줍니다. 이 함수에서 "value"를 반환하고 반환 유형이 double이 아닌 경우 (아마도 32 비트 유형 일 수 있습니다) 코드에 잠재적 인 버그가 있습니다 (명확하게 표시 할 특정 값이 아닌 문자열이 훨씬 더 큰 가치 임). 함수가 double을 반환하면 분석에서 거짓 긍정이며 UI에 해당 함수를 표시하여 결함이 다시 표시되지 않도록 할 수 있습니다.
코드를 더 이상 보지 않고 실제 문제가 있는지 여부를 말하기는 어렵지만 정적 분석은 런타임 값이 무엇인지 알 수 없습니다 (문자열이 실제로 일정합니까 아니면 동적으로 읽혀 집니까?) 그러나 이것이 한 줄 요약이 아닌 자세한 이벤트를 제공하는 이유입니다. 따라서이 코드에서 발생하는 실제 문제의 가능성을 평가할 수 있습니다.
는 검사가 여기에 확실히 커버 리티 (Coverity)의 버그가 수 있도록 수레를 추적 안되고, 모든 것을 가졌어요. 필자가 일하기 때문에이 문제를 해결했지만 Coverity 지원 부서에보고 해주십시오.
제공된 Coverity 경고는 정확히 어느 라인입니까? 이 코드에서 볼 수있는 유일한 정수는'value'에 대입하는 정수 리터럴'0'입니다. 라인을'double value = 0.0;'으로 변경하면 어떻게됩니까? – teukkam
경고는 다음과 같이 0.10 "곱하기 연산은 피연산자에 오버 플로우" "와"부스트 : lexical_cast ". 그래서 도움이되지 않습니다 두 배로 값을 변경. –
polapts
부스트의 lexical_cast 구현 안에 뭔가 될 수 있습니다. 당신은으로 값을 변경하면 어떻게됩니까 double double? – teukkam