WayPointStack wps = *(new WayPointStack());
должно быть
WayPointStack wps;
, поскольку этого достаточно и это устраняет утечку памяти
In
WPCommand WayPointStack::GetNextWP()
{
...
return *(new WPCommand(_END, 10000));
}
вы создаете другую утечку памяти, может быть, не возвращать элемент, но его адрес позволяет вернуть nullptr при ошибке?
/*const ?*/ WPCommand * WayPointStack::GetNextWP()
{
Serial.println("Pointer = ");
Serial.println(pointer);
Serial.println("Length = ");
Serial.println(_length);
if (pointer < _length){
return &_wp[pointer++];
}
return nullptr;
}
иначе использовать статическую переменную:
WPCommand WayPointStack::GetNextWP()
{
...
static WPCommand error(_END, 10000);
return error;
}
В
void WayPointStack::AddWP(int target, int time)
{
if (_length == arrSize)
return;
_wp[_length] = *(new WPCommand(target, time));
_length++;
}
вы создаете другую утечку памяти, вам просто нужно инициализировать запись:
void WayPointStack::AddWP(int target, int time)
{
if (_length == arrSize)
return;
_wp[_length]._target = target, time));
_wp[_length]._time = time;
_length++;
}
вы не сигнализируете об ошибке, когда не можете добавить новый элемент, что будет возвращать bool , оценивающий false при ошибке и true, когда вы можете добавить:
bool WayPointStack::AddWP(int target, int time)
{
if (_length == arrSize)
return false;
_wp[_length]._target = target;
_wp[_length]._time = time;
_length++;
return true;
}
НаконецПочему вы не используете std::vector
для _wp