A memory leak occurs when you allocate heap memory but never free it. The memory stays allocated until the program ends, even though nothing references it. You've lost access to memory you can't reclaim.
Leaks accumulate over time. A small leak in a loop can exhaust available memory. Long-running programs like servers are especially vulnerable. Users see growing memory usage. Common causes: forgetting delete, early return before delete, exceptions before delete, or overwriting a pointer before deleting what it pointed to.
Smart pointers prevent all of these.