2020-05-08

Problema de fuga de memoria

  • La causa directa del problema de fuga de memoria es que después de crear un puntero salvaje con new, no se llamó a delete.
  • Después de update current position, Map Kit invocó prepareGuidanceData con el objetivo de encontrar los datos de guía más cercanos a la posición actual.
  • prepareGuidanceData llamó a NavInfoProviderImpl::getTrafficLights y NavInfoProviderImpl::getCarParks.
  • Tomando NavInfoProviderImpl::getTrafficLights como ejemplo, al llamarlo se crea un puntero a los datos de NaviEventOnPath con new.
  • Sin embargo, no se llamó a delete.
  • También se descubrió que DestEvent presenta este problema.

Solución: El núcleo es no permitir la existencia de punteros salvajes, por lo que se decide refactorizar NaviEventProvider.

  • Primero, agregar dos campos traffic_light_events y car_park_events en NaviInfoProvider.
  • En NaviInfoGenerator, actualizar estos dos campos después de que la ruta se actualice (route updated).
  • Luego, en cada llamada a get, filtrar según la posición actual del vehículo.
  • Por lo tanto, es necesario refactorizar PathReader::getAttributes, ya que la implementación anterior solo consideraba el desplazamiento relativo al vehículo actual. Ahora se necesita una interfaz de desplazamiento relativo a la ruta (Path).