MST

星途 面试题库

面试题:C++指针使用的中等难度问题

请简述在C++中使用指针进行动态内存分配时,如何避免内存泄漏,并举出至少两种常见的错误场景及对应的解决办法。
12.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

避免内存泄漏的方法

  1. 使用delete操作符:在使用new分配内存后,确保在不再需要该内存时使用delete进行释放。例如:
int* ptr = new int;
// 使用ptr
delete ptr;
  1. 智能指针:C++ 提供了智能指针(std::unique_ptrstd::shared_ptrstd::weak_ptr)来自动管理内存。例如,使用std::unique_ptr
std::unique_ptr<int> ptr(new int);
// 使用ptr,当ptr离开作用域时,内存会自动释放

常见错误场景及解决办法

  1. 忘记释放内存
    • 错误场景
int* ptr = new int;
// 后续代码中忘记使用delete ptr;
- **解决办法**:养成在分配内存后立即规划释放的习惯,或者使用智能指针来自动管理内存。

2. 多次释放内存 - 错误场景

int* ptr = new int;
delete ptr;
// 不小心再次执行delete ptr;
- **解决办法**:释放内存后将指针设置为`nullptr`,这样再次释放`nullptr`不会产生错误。
int* ptr = new int;
delete ptr;
ptr = nullptr;
  1. 在循环中分配内存但未释放
    • 错误场景
for (int i = 0; i < 10; ++i) {
    int* ptr = new int;
    // 循环内没有释放ptr
}
- **解决办法**:在每次循环结束前释放分配的内存,或者将内存管理交给智能指针。
for (int i = 0; i < 10; ++i) {
    std::unique_ptr<int> ptr(new int);
    // 无需手动释放,离开循环时自动释放
}