0

我有以下代码

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)];
}

Klockwork 告诉我

Array 'pLogger' of size 2 may use index value(s) 2

这里真的有问题吗?如果是这样,请知道如何处理这个问题。我应该为“static_cast(type)”添加一些保护吗?非常感谢

** 以下是我猜的问题** 因为我们有 5 个 LoggerType,KW 可能认为即使我们没有越界访问也是可能的。所以我们必须在这里添加一些保护,

Logger* pReturnLogger = NULL;

if (static_cast<UINT8>(type) < static_cast<UINT8>(LoggerType::NUM_OF_TYPE))
{
    pReturnLogger = pLogger[static_cast<UINT8>(type)];
}
return pReturnLogger;
4

0 回答 0