-6

私はcppcheckを使用していますが、コードは正しく機能しています.cppcheckだけでこのエラーが発生します.

void WorkerThread(WorkBuffer* m_buffer)
{
    std::cout << "Thread : " << m_buffer->m_id << ".....Starting" << std::endl;

    if (NULL == m_buffer)
        std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl;


    while(!shut_down_flag)
    {
        int k = 0;
        //Sleep(1);
        SleepSystemUsec(100000);
        std::cout << "Thread : " << m_buffer->m_id << "....in while loop" << std::endl;
    } // of while(!shut_down_flag)

    std::cout << "Thread : " << m_buffer->m_id << ".....Request from main thread so ending working thread ...." << std::endl;
};

エラー : : null ポインター逆参照の可能性: m_buffer - それ以外の場合は、null に対してチェックするのは冗長です。

4

2 に答える 2

5
if (NULL == m_buffer) 

であることを確認しm_bufferNULLから、それを逆参照します

std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl;
                            ^^^^^^^^^^^^^^^

this は、そうm_bufferない NULL場合にのみ有効です (より正確には、正しく構築された を指している場合のみWorkBuffer)。

NULLが関数の入力である可能性がある場合は、最初の逆参照のにそれを確認してから、有効なものを指すようにするか、逆参照せずに関数を終了する必要があります。

于 2015-04-20T14:24:11.063 に答える
0

あなたの状態が後退しているだけではありません:

if m_bufferis NULL:
  逆参照することを行いますm_buffer
(ハァッ?!)

ただし、他の出力ステートメントにはチェックがありません。

于 2015-04-20T14:58:31.500 に答える