All the definitions given here (at the time I wrote this, we have gotten better answers since) fail to address one borderline case:
You have a singleton that allocates memory upon creation and this memory is normally held as long as the program is running even though the current use is done and it's unknown whether any future use will ever be made or not. This is generally done because of the overhead of recreating it.
By the "fail to free when done with it" standard this would be considered a leak and I've seen leak-reporting tools call such things leaks as the memory was still in use. (And in fact the code may not contain code capable of cleaning the object up.)
However, I have encountered code of this nature in compiler libraries before even when the cost of recreating the object isn't all that great.
Leak or not?