当前位置: 首页 > news >正文

嵌入式八股,内存泄漏

1. 什么是内存泄漏?

内存泄漏是指程序中动态分配的内存没有被正确释放,导致这部分内存无法被系统重新使用。随着时间的推移,泄漏的内存会不断累积,最终可能导致以下问题:

  • 程序占用的内存不断增加,消耗系统资源。

  • 系统可用内存减少,可能导致其他程序运行缓慢甚至崩溃。

  • 在极端情况下,可能导致程序崩溃或系统死机。

内存泄漏通常发生在动态内存分配的场景中,例如使用C语言中的 malloccallocrealloc,或C++中的 new 分配内存,但没有通过 freedelete 释放内存。

2.内存泄漏情况细分

细分可分为三种情况。

(1)忘记释放内存

这是最常见的内存泄漏原因。例如:

void func() {
    int* ptr = malloc(sizeof(int)); // 分配内存
    *ptr = 10;
    // 忘记调用 free(ptr);
}

每次调用 func(),都会分配一块内存,但从未释放,导致内存泄漏。

(2)指针被覆盖

在某些情况下,指针的值被意外覆盖,导致无法访问原始分配的内存,从而无法释放。例如:

int* ptr = malloc(sizeof(int));
ptr = NULL; // 指针被覆盖,无法释放原始内存
(3)异常或错误导致提前退出

如果程序在分配内存后发生异常或提前退出,可能会导致内存未被释放。例如:

void func() {
    int* ptr = malloc(sizeof(int));
    if (ptr == NULL) {
        return; // 提前退出,忘记释放内存
    }
    // 其他代码
}

 

相关文章:

  • imutils opencv-python 的一些操作
  • C/C++中的字符串
  • TCP半连接、长连接
  • Windows获取字体文件
  • R语言安装教程(附安装包)R语言4.3.2版本安装教程
  • deepseek 清华大学[1-5版]全集
  • 【PX4日志解析报错】pyulog工具解析日志出错
  • 【管道 】
  • STM32的HAL库开发---ADC采集内部温度传感器
  • 大疆激光雷达录制的bag包无法解析出topic怎么办?
  • 【Blender】二、建模篇--07,置换修改器
  • 第14篇:Vue Router 高级用法与路由守卫
  • 2025教育与科研领域实战全解析:DeepSeek赋能细分场景深度指南(附全流程案例与资源)
  • Android 实现 RTMP 推流:快速集成指南
  • PyTorch 是如何进行机器学习的
  • stm32108键C-B全调性_动态可视化乐谱钢琴
  • conda 基本命令
  • HttpWatch 9.4.17 Pro网页调试与性能优化 资源工具分享
  • Leetcode-42. Trapping Rain Water [C++][Java]
  • 能否在delete一个指针后继续使用它以及原因
  • 网站建设首选九零后网络/优化网站排名需要多少钱
  • asp的web音乐网站设计/台湾永久免费加密一
  • 直播做网站/百度收录好的免费网站
  • 有那种做拼贴的网站吗/人民政府网站
  • 设计网站公司的口号/知乎关键词排名
  • dreamweaver网站开发视频/企业网站推广方案