2

コードは正常に動作していますが、cppcheck で確認したところ、null ポインター dereferenc エラーが見つかりました。解決方法がわかりませんでした。どんな考えでもいただければ幸いです

ここにエラーが発生したコードの一部があります

#ifdef DEBUG_LEVEL_MID
    std::clog << "STARTING FUNCTION int ConfigurationType::ExecuteMessageType()" << std::endl;
    std::clog << "message with code : " << message_to_execute->code << "will be tried o executed" << std::endl;
    #endif    

    if(!message_to_execute)
    {
        #ifdef DEBUG_LEVEL_ERROR
        std::cerr << "message_to_execute is null at: int ConfigurationType::ExecuteMessageType()" << std::endl;
        #endif    
        #ifdef DEBUG_LEVEL_MID
        std::clog << "message_to_execute is NULL at int ConfigurationType::ExecuteMessageType()" << std::endl;
        std::clog << "ENDING FUNCTION (0): int ConfigurationType::ExecuteMessageType()" << std::endl;
        #endif    
        return 0;
    }

エラーは次のとおりです: null ポインター逆参照の可能性: message_to_execute - そうでない場合、null に対してチェックするのは冗長です。

4

2 に答える 2

3

ここで逆参照message_to_executeします: std::clog << "message with code : " << message_to_execute->code.

これはif (!message_to_execute)、null ポインターを逆参照することが許可されていないため、後者は冗長であることを意味します。したがって、コンパイラーはそれmessage_to_executeが null ではないと想定し、テストを削除できます。

于 2015-04-20T12:44:58.837 に答える
2

ポインターが有効かどうかを確認する前に、既にポインターにアクセスしています: message_to_execute->code。これを if ステートメントに移動すると、警告が表示されなくなります。

CPPCheck は正しいです。nullptr の場合は nullptr 逆参照になり、そうでない場合はチェックしますか?

于 2015-04-20T12:41:46.740 に答える