At first glance AODV and DSR are similar, but there are some differences that are worth exploiting. The routing mechanisms of the two protocols are very different; DSR uses source routing with cache entries while AODV uses a routing table based approach. This difference allows DSR to maintain multiple routes for each destination as well as know the complete hop by hop route to each destination. Nodes in AODV, on the other hand, only know the previous and next hop and only contain one route to each destination. This means that nodes using DSR have access to a significantly more amount of network information than nodes using AODV. This saves DSR from having to flood the network when a link fails, as AODV does.
In AODV old routing entries are replaced by "fresher" ones using sequence numbers and TTLs. DSR uses no mechanism to remove stale routes from the network. When a link fails an error packet is sent to the source node which removes any paths using the link from its route cache. However, other nodes on the network are not notified of the failure until they themselves attempt to use the failed link. Because of this it is possible for DSR to pollute the network with old routing information. It should be noted that AODV's approach is not perfect either because it is possible for valid routes to time out and be deleted.