я просто использую 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 — иначе избыточно проверять его на нулевой.
if (NULL == m_buffer)
убеждается m_buffer
является NULL
, а затем вы разыменовываете это с
std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl;
^^^^^^^^^^^^^^^
это, которое только законно, если m_buffer
является не NULL
(точнее, только если он указывает на правильно построенный WorkBuffer
).
Если NULL
это возможный вход для вашей функции, вы должны проверить его до самое первое разыменование, а затем либо сделать так, чтобы оно указывало на что-то действительное, либо оставить функцию без разыменования.
Не только ваше состояние в обратном направлении:
если
m_buffer
являетсяNULL
:
делать то, что разыменованиеm_buffer
(Да ?!)
но у вас нет проверок ни на одном из других операторов вывода.