面试题答案
一键面试避免内存泄漏的方法
- 使用
delete
操作符:在使用new
分配内存后,确保在不再需要该内存时使用delete
进行释放。例如:
int* ptr = new int;
// 使用ptr
delete ptr;
- 智能指针:C++ 提供了智能指针(
std::unique_ptr
、std::shared_ptr
、std::weak_ptr
)来自动管理内存。例如,使用std::unique_ptr
:
std::unique_ptr<int> ptr(new int);
// 使用ptr,当ptr离开作用域时,内存会自动释放
常见错误场景及解决办法
- 忘记释放内存
- 错误场景:
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;
- 在循环中分配内存但未释放
- 错误场景:
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);
// 无需手动释放,离开循环时自动释放
}