Dangling Pointer

See WildPointer.

A pointer that was pointing to the right object, but the memory pointed by this pointer was then returned to the MemoryAllocationEngine?, while some parts of the program still refer to it.

The memory is therefore reassigned to other parts of the program, which change it at will, so the pointer seems to dangle: The data pointed to by this dangling pointer is meaningless, and dereferencing it will normally cause UndefinedBehavior.

This can't happen when using GarbageCollection. It also can't happen when using arena-based memory allocation with safety enforced by a type system, such as the "region" mechanism in CycloneLanguage.

In some systems, for example the ObjectCapabilityOperatingSystems ErosOs and KeyKos, deleting an arena ("zapping a space bank" in EROS/KeyKOS terminology), results in pointers that dangle, but that have well-defined error behaviour. So dereferencing a DanglingPointer does not necessarily cause UndefinedBehavior.

There are other ways to create WildPointers:

If a language has none of these (JavaLanguage is an example), then dangling pointers aren't possible. Elimination of manual memory allocation is necessary to eliminate dangling pointers; but not sufficient.

I think you meant manual memory deallocation. See also ResourceAcquisitionIsInitialization and BoostSharedPtr for how to eliminate dangling pointers in C++.


View edit of November 8, 2014 or FindPage with title or text search