Cppcheck可能的空指针取消引用:

时间:2015-04-20 14:20:46

标签: c++ cppcheck

我只是使用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;
};

错误::可能的空指针取消引用:m_buffer - 否则检查空值是多余的。

2 个答案:

答案 0 :(得分:4)

if (NULL == m_buffer) 

确保m_bufferNULL,然后用

对其进行反驳
std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl;
                            ^^^^^^^^^^^^^^^

这是合法的,如果m_buffer 不是 NULL(更确切地说,只有当它指向正确构造的WorkBuffer时)才合法。

如果NULL是您的函数的可能输入,则需要在第一个取消引用之前检查,然后使其指向有效的内容,或者在不解除引用的情况下保留该函数

答案 1 :(得分:0)

不仅你的状况倒退了:

  

如果m_bufferNULL
  做一些解除引用m_buffer的事情   (啊?!)

但您没有检查任何其他输出语句。