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

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

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合法时才合法(更准确地说,只有当它指向正确构造的 时)。 NULLWorkBuffer

如果NULL是您的函数的可能输入,您需要在第一次取消引用之前检查它,然后使其指向有效的东西或离开函数而不取消引用。

于 2015-04-20T14:24:11.063 回答
0

不仅你的情况倒退了:

如果m_bufferNULL
  做一些取消引用的事情m_buffer
(嗯?!)

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

于 2015-04-20T14:58:31.500 回答