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

C语言(内存泄漏和野指针)

一、内存泄漏

1.概念

内存泄漏:malloc realloc calloc申请的空间第一个字节的地址被覆盖,永远也找不到,无法进行释放回收

通俗来说:你向图书馆借了一本书(申请内存),看完后不归还(不释放),这本书永远被你占着,其他读者(程序其他部分 / 其他程序)用不了,直到图书馆关门(程序退出)才收回。

2.例子

  • 首字节丢失了
//一定要保存第一个字节的地址进行释放 否则释放别的地址会报错 void test() { int* p = (int*)malloc(100); p++;//首地址变更 free(p); }
  • 忘记free
// 申请内存后忘记free void leak1() { int *p = (int*)malloc(sizeof(int)); *p = 10; // 未调用free(p),内存泄漏! }
  • 分支导致free未执行
//分支执行导致free未执行 void leak2(int flag) { int *p = (int*)malloc(sizeof(int)); if (flag) { return; // 分支退出,free未执行,内存泄漏 } free(p); // 仅flag=0时执行free }

3.如何避免内存泄漏

申请和释放一定要成对出现

二、野指针

1.概念

不是NULL指针,而是指向无效内存地址的指针。它指向的空间可能已经被释放、超出数组范围、未初始化或者不属于当前程序的内存空间。指针中存储的地址是“未知、无效的”,对其解引用会导致未知的后果

通俗来说:你手里拿着一张作废的房门钥匙(野指针),钥匙上的房间号(地址)要么已经被注销(内存释放)、要么根本不存在(未初始化 / 越界),强行开门(解引用)会触发警报(程序崩溃 / 数据篡改)。

2.例子

  • free后未置空
//free后未置空,指针成野指针 void wild1() { int *p = (int*)malloc(sizeof(int)); free(p); // 释放内存,但p仍指向原地址 *p = 20; // 解引用野指针!(访问已释放的内存) }
  • 指针未初始化
//未初始化的野指针 void wild2() { int *p; // 未初始化,p存储随机地址(野指针) *p = 30; // 解引用野指针!(访问随机无效内存) }

3.如何避免野指针

指针遵循:初始化-判空-置空的顺序

三、二者对比

维度内存泄漏野指针
本质内存申请后未释放,资源浪费指针指向无效内存,非法访问
直接危害长期运行导致内存占用飙升,最终可能 OOM(内存耗尽)解引用时大概率崩溃,或篡改内存数据(逻辑异常)
表现形式程序能正常运行,但内存占用越来越大程序随机崩溃 / 结果错误(偶发性强,难调试)
检测难度较易(工具如 valgrind 可直接定位)较难(依赖上下文,无固定报错特征)
生命周期从申请内存未释放开始,直到程序退出指针指向无效内存的那一刻起
http://www.jsqmd.com/news/485219/

相关文章:

  • 天虹提货劵回收价格如何,回收平台哪家更突出 - 京回收小程序
  • Java中的时区规则库
  • 互联网大厂Java面试实录:严肃面试官与搞笑程序员蔡虚昆的较量
  • 刷招聘软件时的迟疑?AI大模型才是程序员的新底气
  • Python编程环境搭建指南:安装Python解释器和PyCharm
  • 2024提示系统风险评估新工具:架构师正在用的3款开源风险评估框架
  • 薄膜铂电阻元件助力食品机械与制药行业实现卫生级测温 - 品牌推荐大师1
  • AI产品单月狂赚2000万美元,大模型训练师成普通人红利风口
  • C盘清理技巧分享(win11系统)
  • 【小白说】【论文拆解】Sign-Agnostic Implicit Learning of Surface Self-Similarities for Shape Modeling and Reco
  • JavaScript性能优化实战溉似
  • Thinkphp和Laravel框架都支持小程序基于手机端的特色农产品团购平台设计与实现-
  • 传统流量逻辑的三大失效点
  • 乡村文旅旧改微景观改造公司推荐:靠谱选择技巧解析
  • 【AP出版】 第六届企业管理与经济发展国际会议(ICEMED 2026)
  • 智能制造与工业互联网企业如何破解销售难题?卓翰咨询“训战+陪跑”模式揭秘
  • 网络安全--Windows操作系统
  • Anthropic起诉特朗普政府:AI伦理与国家安全的法律对决
  • macOS 下 LaTeX 论文写作教程(中英文适配)
  • Laserfiche在《2026年CRN®合作伙伴计划指南》中获得五星评级
  • 《C++实战项目-高并发内存池》8. 最终性能优化与测试
  • 聊聊上海家装公司服务,上海津昊装饰口碑与价格情况如何 - 工业品网
  • 计科-计网5-局域网与广域网技术「整理」
  • 短信推广平台选哪家好?电商节大促高峰短信发送方案 - Qqinqin
  • 探讨2026年扬州可靠的母婴护理服务,母婴护理课程值得选吗 - 工业推荐榜
  • Thinkphp和Laravel框架都支持基于小程序的民宿预订系统-web pc 手机端
  • 被很多人忽视的 7900 万美金攻击:钱包地址投毒正在快速增长!
  • 分析2026年实木家具定制服务,哪家便宜又靠谱的品牌有哪些 - 工业推荐榜
  • 第3章 矩阵:系统、变换与结构的表达
  • 【瑞萨AI挑战赛】#02 DL任务说明及训练