没有用,又没有被释放掉所以就产生了内存泄露。
如果你参加面试,面试官经常会问到你的一个问题可能是:你在开发过程中,有过排除内存泄漏的经验吗?对于一个合格的Android/C/Java开发老手,这个问题想必已经深入你的心;若是一名新手或者一直对内存泄漏这个东西模模糊糊的工程师,你的答案可能让面试官并不满意,这里将从底到上对内存泄漏的原因、排查方法和一些经验为你做一次完整的解剖。
处理内存泄漏的问题是将软件做到极致的一个必须的步骤,尤其是那种将被用户高强度使用的软件。
一个简单的C和Android的例子
一个最简单的C的内存泄漏的例子:
char *ptr1 = (char *)malloc(10); char *ptr2 = (char *)malloc(10); ptr2 = ptr1; free(ptr1)
这里最后发生了10个字节的内存泄漏,那么到底发生了什么?
首先各自分配了两块10个字节的内存,分别用叫ptr1和ptr2的指针指向这两块内存(就像是java中的引用),然后呢让ptr2也指向一开始ptr1指向的那块内存(这时候ptr1和ptr2都指向了ptr1一开始指向的那个10个字节的内存),最后用free将ptr1指向的那块内存给释放了——>结果就是一开始ptr2指向的那块内存发生了泄漏(没人用了却又回收不掉)