2020-05-08

Speicherleck-Problem

  • Die direkte Ursache des Speicherlecks ist, dass nach dem new eines wilden Zeigers kein delete erfolgt.
  • Nach dem Aktualisieren der aktuellen Position ruft das Map Kit prepareGuidanceData auf, um die nächstgelegenen Guidance-Daten zur aktuellen Position zu finden.
  • prepareGuidanceData ruft NavInfoProviderImpl::getTrafficLights und NavInfoProviderImpl::getCarParks auf.
  • Am Beispiel von NavInfoProviderImpl::getTrafficLights: Beim Aufruf wird ein Datenzeiger aus NaviEventOnPath mit new erstellt.
  • Es erfolgt jedoch kein delete.
  • Zudem wurde festgestellt, dass das Problem auch bei DestEvent auftritt.

Lösungsansatz: Der Kern liegt darin, keine wilden Zeiger zuzulassen. Daher wird eine Umstrukturierung von NaviEventProvider beschlossen.

  • Zunächst werden zwei Felder traffic_light_events und car_park_events in NaviInfoProvider hinzugefügt.
  • In NaviInfoGenerator werden diese beiden Felder nach einer Routenaktualisierung aktualisiert.
  • Beim späteren Zugriff (get) wird dann eine Filterung basierend auf der aktuellen Fahrzeugposition vorgenommen.
  • Daher muss PathReader::getAttributes umstrukturiert werden, da die bisherige Implementierung nur den Offset relativ zum aktuellen Fahrzeug berücksichtigt. Nun wird eine Schnittstelle für einen Offset relativ zum Pfad benötigt.