One of the topics that confuse programmers the most about memory management is the usage of double pointers when modifying references (addresses) inside functions. This problem is often encountered when trying to modify non-random-access data structures, like linked lists, queues, stacks, trees, graphs, etc.