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 — иначе избыточно проверять его на нулевой.

-6

Решение

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 это возможный вход для вашей функции, вы должны проверить его до самое первое разыменование, а затем либо сделать так, чтобы оно указывало на что-то действительное, либо оставить функцию без разыменования.

4

Другие решения

Не только ваше состояние в обратном направлении:

если m_buffer является NULL:
  делать то, что разыменование m_buffer
(Да ?!)

но у вас нет проверок ни на одном из других операторов вывода.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector