C++基础(⑥资源释放)
·
内存泄漏 = 租了储物箱不还,占着茅坑不拉屎。
资源耗尽 = 把所有工具都占了,别人没得用。
资源释放 = 用完东西马上还,方便别人也方便自己。
#include <iostream>
#include <cstdio> // 用于文件操作
// 1. 内存泄漏示例:只申请内存不释放
void memory_leak_example() {
std::cout << "\n--- 内存泄漏演示 ---" << std::endl;
// 每次调用这个函数,都会新申请一块内存,但不释放
int* data = new int[1000]; // 申请能存1000个整数的内存(类似借了一个箱子)
std::cout << "申请了内存,但没释放..." << std::endl;
// 这里故意不写 delete[] data; 导致内存被永久占用
}
// 2. 资源耗尽示例:打开文件不关闭
void resource_exhaust_example() {
std::cout << "\n--- 资源耗尽演示 ---" << std::endl;
int count = 0;
while (true) {
// 不断打开文件但不关闭(类似不断借钥匙不还)
FILE* file = fopen("test.txt", "w");
if (file == nullptr) { // 当系统没有可用文件资源时,打开会失败
std::cout << "打开第 " << count + 1 << " 个文件时失败,资源耗尽!" << std::endl;
break;
}
count++;
std::cout << "已打开 " << count << " 个文件(未关闭)" << std::endl;
// 故意不写 fclose(file); 导致文件资源被耗尽
}
}
// 3. 正确释放资源的示例
void correct_resource_management() {
std::cout << "\n--- 正确释放资源演示 ---" << std::endl;
// 内存资源:申请后必须释放
int* data = new int[1000];
std::cout << "使用内存中..." << std::endl;
delete[] data; // 释放内存(把箱子还回去)
std::cout << "内存已释放" << std::endl;
// 文件资源:打开后必须关闭
FILE* file = fopen("test.txt", "w");
if (file != nullptr) {
std::cout << "使用文件中..." << std::endl;
fclose(file); // 关闭文件(把钥匙还回去)
std::cout << "文件已关闭" << std::endl;
}
}
int main() {
// 演示内存泄漏(可以多调用几次,模拟多次泄漏)
memory_leak_example();
// 演示资源耗尽(运行后会自动停止,可能需要等几秒)
resource_exhaust_example();
// 演示正确的资源释放
correct_resource_management();
return 0;
}
123
更多推荐


所有评论(0)