东方微电嵌入式面试题及参考答案
内存泄露场景及如何在编程层面避免内存泄漏
- 内存泄露场景
- 动态分配内存未释放:在使用编程语言如 C、C++ 时,通过
malloc
、new
等操作动态分配内存后,如果在使用完毕后没有使用相应的free
、delete
操作释放内存,就会导致内存泄露。比如在一个函数中动态分配了一块内存用于存储数据,但在函数结束时忘记释放该内存,那么这块内存就会一直被占用,无法被系统再次利用。 - 对象引用未正确释放:当使用一些具有自动内存管理机制的编程语言时,如 Java、Python 等,如果对象之间存在强引用循环,也可能导致内存泄露。例如在 Java 中,两个对象相互引用,且没有其他引用指向它们时,垃圾回收器无法回收这两个对象占用的内存。
- 资源未关闭:在使用文件操作、网络连接等资源时,如果在使用完毕后没有关闭资源,这些资源所占用的内存以及与之相关的一些内部缓冲区等可能无法被释放。比如在 C 语言中打开一个文件后,如果没有使用
fclose
函数关闭文件,那么文件所占用的系统资源就会一直被占用。 - 容器类对象无限增长
- 动态分配内存未释放:在使用编程语言如 C、C++ 时,通过