Memory leak detection plays an essential role in the process of software development, which is also critical to ensure the reliability of the system. Memory leak occurs when useless objects cannot be released promptly during program execution. To further research memory leak and its detection methods, we firstly classify memory leak into two types according to the memory management mechanism of different programming languages. Secondly, we summarize a number of memory leak detection methods from static and dynamic. Thirdly, we list a series of benchmarks and leaked programs which are widely verified in current research. Finally, we discuss several threats to the validity of memory leak detection and conclude the future work.