内存泄漏 = 租了储物箱不还,占着茅坑不拉屎。
资源耗尽 = 把所有工具都占了,别人没得用。
资源释放 = 用完东西马上还,方便别人也方便自己。

#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

更多推荐