код работает правильно, но когда я проверил его на 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 — в противном случае избыточно проверять его на нулевой.
Вы разыменование message_to_execute
Вот: std::clog << "message with code : " << message_to_execute->code
,
Это означает, что if (!message_to_execute)
позже избыточно, потому что вы не можете разыменовать нулевой указатель, поэтому компилятор может предположить, что message_to_execute
не является нулевым, и удалите тест.
Вы уже получаете доступ к указателю, прежде чем проверять его действительность: message_to_execute->code
, Переместите это в оператор if, и предупреждение исчезнет.
CPPCheck прав, если это nullptr, это будет разыменованием nullptr, и если это не так, вы будете проверять, если это так?