cppcheck разыменование нулевого указателя: m_buffer — иначе избыточно проверять его на нулевой

код работает правильно, но когда я проверил его на cppcheck, я обнаружил ошибку разыменования нулевого указателя, я не мог понять, как ее решить. любые мысли будут оценены

вот та часть кода, в которой я получил ошибку

#ifdef DEBUG_LEVEL_MID
std::clog << "STARTING FUNCTION int ConfigurationType::ExecuteMessageType()" << std::endl;
std::clog << "message with code : " << message_to_execute->code << "will be tried o executed" << std::endl;
#endif

if(!message_to_execute)
{
#ifdef DEBUG_LEVEL_ERROR
std::cerr << "message_to_execute is null at: int ConfigurationType::ExecuteMessageType()" << std::endl;
#endif
#ifdef DEBUG_LEVEL_MID
std::clog << "message_to_execute is NULL at int ConfigurationType::ExecuteMessageType()" << std::endl;
std::clog << "ENDING FUNCTION (0): int ConfigurationType::ExecuteMessageType()" << std::endl;
#endif
return 0;
}

ошибка: возможно разыменование нулевого указателя: message_to_execute — в противном случае избыточно проверять его на нулевой.

2

Решение

Вы разыменование message_to_execute Вот: std::clog << "message with code : " << message_to_execute->code,

Это означает, что if (!message_to_execute) позже избыточно, потому что вы не можете разыменовать нулевой указатель, поэтому компилятор может предположить, что message_to_execute не является нулевым, и удалите тест.

3

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

Вы уже получаете доступ к указателю, прежде чем проверять его действительность: message_to_execute->code, Переместите это в оператор if, и предупреждение исчезнет.

CPPCheck прав, если это nullptr, это будет разыменованием nullptr, и если это не так, вы будете проверять, если это так?

2

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