C++ 面试题 目录

C++ 中什么是内存泄漏 (memory leak)?

推荐答案

内存泄漏(Memory Leak)是指在程序运行过程中,动态分配的内存没有被正确释放,导致这部分内存无法再被程序使用,从而造成内存资源的浪费。如果内存泄漏持续发生,最终可能导致程序耗尽所有可用内存,进而引发程序崩溃或系统性能下降。

本题详细解读

什么是内存泄漏?

内存泄漏通常发生在使用动态内存分配(如 newmalloc)时,程序员忘记释放已经不再使用的内存。例如:

在上面的代码中,ptr 指向的内存没有被释放,即使程序不再使用它,这部分内存也无法被回收,从而导致内存泄漏。

内存泄漏的影响

  1. 内存资源浪费:泄漏的内存无法被其他程序或进程使用,导致系统可用内存减少。
  2. 程序性能下降:随着内存泄漏的积累,程序可能变得越来越慢,甚至崩溃。
  3. 系统稳定性问题:在长时间运行的程序中,内存泄漏可能导致系统内存耗尽,进而影响整个系统的稳定性。

如何避免内存泄漏?

  1. 使用智能指针:C++11 引入了智能指针(如 std::unique_ptrstd::shared_ptr),它们可以自动管理内存的释放,避免手动管理内存带来的风险。

  2. 遵循 RAII 原则:RAII(Resource Acquisition Is Initialization)是 C++ 中的一种编程范式,通过在对象的构造函数中获取资源,在析构函数中释放资源,确保资源在使用完毕后被正确释放。

  3. 使用工具检测内存泄漏:可以使用一些工具(如 Valgrind、AddressSanitizer 等)来检测程序中的内存泄漏问题。

示例代码

-- -------------------- ---- -------
-------- ----------
-------- --------

---- ------------------- -
    ---- --- - --- --------  -- ------
    -- -- ---
    -- ------
-

---- --------------------- -
    -------------------- --- - --------------------------  -- ------
    -- -- ---
    -- ---------
-

--- ------ -
    --------------------  -- ----
    ----------------------  -- -----
    ------ --
-

在上面的代码中,memoryLeakExample 函数会导致内存泄漏,而 noMemoryLeakExample 函数则不会,因为它使用了智能指针来自动管理内存。

纠错
反馈