2020-05-08
Speicherleck-Problem
- Die direkte Ursache des Speicherlecks ist, dass nach dem
neweines wilden Zeigers keindeleteerfolgt. - Nach dem Aktualisieren der aktuellen Position ruft das Map Kit
prepareGuidanceDataauf, um die nächstgelegenen Guidance-Daten zur aktuellen Position zu finden. prepareGuidanceDataruftNavInfoProviderImpl::getTrafficLightsundNavInfoProviderImpl::getCarParksauf.- Am Beispiel von
NavInfoProviderImpl::getTrafficLights: Beim Aufruf wird ein Datenzeiger ausNaviEventOnPathmitnewerstellt. - Es erfolgt jedoch kein
delete. - Zudem wurde festgestellt, dass das Problem auch bei
DestEventauftritt.
Lösungsansatz: Der Kern liegt darin, keine wilden Zeiger zuzulassen. Daher wird eine Umstrukturierung von NaviEventProvider beschlossen.
- Zunächst werden zwei Felder
traffic_light_eventsundcar_park_eventsinNaviInfoProviderhinzugefügt. - In
NaviInfoGeneratorwerden 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::getAttributesumstrukturiert 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.