次のコードがあります
enum class LoggerType
{
ASCII,
BINARY_1,
TEXT,
BINARY_2,
NUM_OF_TYPE
};
Logger* Logger::GetInstance(
LoggerType type)
{
static Logger* pLogger[4] =
{
new Logger(LoggerType::ASCII),
new Logger(LoggerType::BINARY_1),
new Logger(LoggerType::TEXT),
new Logger(LoggerType::BINARY_2)
};
return pLogger[static_cast<UINT8>(type)];
}
そしてクロックワークは教えてくれる
Array 'pLogger' of size 2 may use index value(s) 2
ここに本当の問題がありますか?もしそうなら、この問題に対処する方法を教えてください。「static_cast(type)」に何らかの保護を追加する必要がありますか? どうもありがとう
** 以下は、私が推測する問題です ** LoggerType が 5 つあるため、KW は、私たちがそうでなくても out ofbound にアクセスできると考えるかもしれません。したがって、ここに保護を追加する必要があります。
Logger* pReturnLogger = NULL;
if (static_cast<UINT8>(type) < static_cast<UINT8>(LoggerType::NUM_OF_TYPE))
{
pReturnLogger = pLogger[static_cast<UINT8>(type)];
}
return pReturnLogger;