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ó adelete. - Después de
update current position, Map Kit invocóprepareGuidanceDatacon el objetivo de encontrar los datos de guía más cercanos a la posición actual. prepareGuidanceDatallamó aNavInfoProviderImpl::getTrafficLightsyNavInfoProviderImpl::getCarParks.- Tomando
NavInfoProviderImpl::getTrafficLightscomo ejemplo, al llamarlo se crea un puntero a los datos deNaviEventOnPathconnew. - Sin embargo, no se llamó a
delete. - También se descubrió que
DestEventpresenta 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_eventsycar_park_eventsenNaviInfoProvider. - 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).