Parasoft C++test을 사용하여 코드를 정적으로 분석합니다.Parasoft C++ 테스트에서 혼란스러운 제어 흐름 분석
그것은*x;
줄에 경고
void foo(int* x) {
try {
bar();
} catch(...) {
delete x;
throw;
}
*x;
}
가 :
이 는해제 된 메모리는 이후
어떻게 든 어떤 상황에서도 액세스 할 수 없습니다해야 는 결론을 내렸다의 IT는 다음과 같은 코드에 문제가있어 해당 제어 흐름이 catch(...)
블록으로 전달되고 x
을 삭제하고 throw;
을 지나서 *x;
으로 변경하십시오. 나는 throw std::exception("");
와 몇 개의 다른 것을 시험해 보았고, 같은 물건을 얻었다. Parasoft는 예외 검사를 포함하는 많은 다른 검사가 있기 때문에 예외에 대해 확실히 알고 제어 흐름에 반영합니다. 이 경우 혼란 스럽습니까? 아니면 실제로이 프로그램을 실행하기위한 어떤 방법이 delete x;
과 *x;
에 모두 충돌합니까?
혼란스러워 보이는군요. –
나는 혼란 스럽다고 말하고 싶지만 Parasoft에게 문의해야합니다. 나는 또한 당신이 이와 같은 실제 코드를 가지고 있다면 잘못을 저지르고 있다고 말하고 싶습니다. –
'delete x;'를 인라인 메서드로 추출 할 수 있습니까? 아니면 Parasoft도 거기를 들여다 볼 것을 알고 있습니까? – quamrana