[牛人杂谈]
C语言中的“内存泄漏”是什么?如何避免?
[复制链接]
1443|39
手机看帖扫描二维码随时随地手机跟帖
onlycook
当前离线
关注TA
发消息
464
主题1872
帖子5562
积分
高级工程师
高级工程师, 积分 5562, 距离下一级还需 2438 积分
高级工程师, 积分 5562, 距离下一级还需 2438 积分
积分5562
在线时间95 小时
精华0
注册时间2020-10-29
最后登录2025-7-1
打赏0.00受赏12.00
电梯直达
楼主
onlycook|
楼主
|
2025-6-6 17:00
|
只看该作者
|倒序浏览
|阅读模式
C语言, 内存, 分配, 使用, 采用, lg
内存泄漏指程序未释放已分配的内存,导致资源耗尽。在C语言中,需手动调用malloc和free。避免方法:
1.使用工具(如Valgrind)检测泄漏。
2.采用“谁分配谁释放”原则。
3.在复杂项目中,考虑使用内存池或智能指针(需结合C++)。
使用特权
评论回复
赏
标题置顶
标题高亮
点赞共0人点赞
bestwell
当前离线
关注TA
发消息
55
主题1867
帖子5553
积分
高级工程师
高级工程师, 积分 5553, 距离下一级还需 2447 积分
高级工程师, 积分 5553, 距离下一级还需 2447 积分
积分5553
在线时间428 小时
精华0
注册时间2020-3-6
最后登录2025-6-21
打赏0.00受赏5.00
沙发
bestwell|
|
2025-6-8 21:10
|
只看该作者
最常见的原因是程序员在使用malloc、calloc、realloc等函数动态分配内存后,忘记了调用free函数释放内存。
使用特权
评论回复
赏
点赞共0人点赞
zerorobert
当前离线
关注TA
发消息
46
主题1812
帖子5415
积分
高级工程师
高级工程师, 积分 5415, 距离下一级还需 2585 积分
高级工程师, 积分 5415, 距离下一级还需 2585 积分
积分5415
在线时间420 小时
精华0
注册时间2020-3-6
最后登录2025-6-21
打赏0.00受赏15.00
板凳
zerorobert|
|
2025-6-8 21:20
|
只看该作者
所有可能的退出路径都释放内存。
使用特权
评论回复
赏
点赞共0人点赞
1988020566
当前离线
关注TA
发消息
414
主题1万
帖子3万
积分
技术总监
技术总监, 积分 32791, 距离下一级还需 17209 积分
技术总监, 积分 32791, 距离下一级还需 17209 积分
积分32791
在线时间803 小时
精华0
注册时间2013-5-4
最后登录2025-6-21
打赏0.00受赏37.00
地板
1988020566|
|
2025-6-8 21:29
|
只看该作者
严格匹配分配和释放。
使用特权
评论回复
赏
点赞共0人点赞
macpherson
当前离线
关注TA
发消息
57
主题1830
帖子5394
积分
高级工程师
高级工程师, 积分 5394, 距离下一级还需 2606 积分
高级工程师, 积分 5394, 距离下一级还需 2606 积分
积分5394
在线时间415 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏5.00
5楼
macpherson|
|
2025-6-8 21:37
|
只看该作者
每次调用malloc、calloc或realloc后,确保在不再需要该内存时调用free进行释放。
使用特权
评论回复
赏
点赞共0人点赞
sesefadou
当前离线
关注TA
发消息
25
主题1778
帖子5325
积分
高级工程师
高级工程师, 积分 5325, 距离下一级还需 2675 积分
高级工程师, 积分 5325, 距离下一级还需 2675 积分
积分5325
在线时间408 小时
精华0
注册时间2020-3-5
最后登录2025-6-26
6楼
sesefadou|
|
2025-6-8 21:45
|
只看该作者
在复杂的程序中,尤其是涉及多线程或回调函数的情况下,内存管理逻辑可能变得复杂,容易遗漏释放内存的步骤。
使用特权
评论回复
赏
点赞共0人点赞
lzmm
当前离线
关注TA
发消息
413
主题9070
帖子2万
积分
技术总监
技术总监, 积分 27437, 距离下一级还需 22563 积分
技术总监, 积分 27437, 距离下一级还需 22563 积分
积分27437
在线时间852 小时
精华0
注册时间2012-8-17
最后登录2025-6-26
打赏0.00受赏38.00
7楼
lzmm|
|
2025-6-8 21:54
|
只看该作者
遵循“谁分配,谁释放”原则,
使用特权
评论回复
赏
点赞共0人点赞
alvpeg
当前离线
关注TA
发消息
38
主题1701
帖子5007
积分
高级工程师
高级工程师, 积分 5007, 距离下一级还需 2993 积分
高级工程师, 积分 5007, 距离下一级还需 2993 积分
积分5007
在线时间393 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏10.00
8楼
alvpeg|
|
2025-6-8 22:02
|
只看该作者
初始化指针与检查有效性
使用特权
评论回复
赏
点赞共0人点赞
belindagraham
当前离线
关注TA
发消息
25
主题1635
帖子4845
积分
中级工程师
中级工程师, 积分 4845, 距离下一级还需 155 积分
中级工程师, 积分 4845, 距离下一级还需 155 积分
积分4845
在线时间376 小时
精华0
注册时间2020-3-6
最后登录2025-6-20
打赏0.00受赏20.00
9楼
belindagraham|
|
2025-6-8 22:11
|
只看该作者
每次使用 malloc、calloc 或 realloc 分配内存后,必须在不再需要这块内存时使用 free 函数释放它。
使用特权
评论回复
赏
点赞共0人点赞
mikewalpole
当前离线
关注TA
发消息
44
主题1651
帖子4908
积分
中级工程师
中级工程师, 积分 4908, 距离下一级还需 92 积分
中级工程师, 积分 4908, 距离下一级还需 92 积分
积分4908
在线时间374 小时
精华0
注册时间2020-3-6
最后登录2025-6-20
打赏0.00受赏10.00
10楼
mikewalpole|
|
2025-6-8 22:20
|
只看该作者
动态分配的内存必须由同一模块或函数释放。
使用特权
评论回复
赏
点赞共0人点赞
nomomy
当前离线
关注TA
发消息
38
主题1592
帖子4722
积分
中级工程师
中级工程师, 积分 4722, 距离下一级还需 278 积分
中级工程师, 积分 4722, 距离下一级还需 278 积分
积分4722
在线时间364 小时
精华0
注册时间2020-3-6
最后登录2025-6-20
打赏0.00受赏15.00
11楼
nomomy|
|
2025-6-8 22:29
|
只看该作者
分配的内存块在函数结束后无法被访问,但未释放。
使用特权
评论回复
赏
点赞共0人点赞
febgxu
当前离线
关注TA
发消息
52
主题4978
帖子1万
积分
资深工程师
资深工程师, 积分 14922, 距离下一级还需 5078 积分
资深工程师, 积分 14922, 距离下一级还需 5078 积分
积分14922
在线时间582 小时
精华0
注册时间2015-9-20
最后登录2025-6-20
打赏0.00受赏31.00
12楼
febgxu|
|
2025-6-8 22:40
|
只看该作者
避免指针丢失,防止因指针覆盖导致无法释放内存
使用特权
评论回复
赏
点赞共0人点赞
hilahope
当前离线
关注TA
发消息
28
主题1516
帖子4527
积分
中级工程师
中级工程师, 积分 4527, 距离下一级还需 473 积分
中级工程师, 积分 4527, 距离下一级还需 473 积分
积分4527
在线时间352 小时
精华0
注册时间2020-3-6
最后登录2025-6-20
打赏0.00受赏10.00
13楼
hilahope|
|
2025-6-8 22:48
|
只看该作者
未释放动态分配的内存
使用特权
评论回复
赏
点赞共0人点赞
earlmax
当前离线
关注TA
发消息
53
主题1664
帖子4950
积分
中级工程师
中级工程师, 积分 4950, 距离下一级还需 50 积分
中级工程师, 积分 4950, 距离下一级还需 50 积分
积分4950
在线时间369 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏15.00
14楼
earlmax|
|
2025-6-8 22:57
|
只看该作者
重复申请内存且未释放旧内存
使用特权
评论回复
赏
点赞共0人点赞
jonas222
当前离线
关注TA
发消息
42
主题1590
帖子4677
积分
中级工程师
中级工程师, 积分 4677, 距离下一级还需 323 积分
中级工程师, 积分 4677, 距离下一级还需 323 积分
积分4677
在线时间357 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏5.00
15楼
jonas222|
|
2025-6-8 23:05
|
只看该作者
每调用一次malloc/calloc,必须确保有对应的free,且释放后将指针置为NULL
使用特权
评论回复
赏
点赞共0人点赞
mnynt121
当前离线
关注TA
发消息
30
主题3264
帖子9771
积分
技术达人
技术达人, 积分 9771, 距离下一级还需 229 积分
技术达人, 积分 9771, 距离下一级还需 229 积分
积分9771
在线时间455 小时
精华0
注册时间2016-8-21
最后登录2025-6-26
打赏0.00受赏15.00
16楼
mnynt121|
|
2025-6-8 23:14
|
只看该作者
严格配对malloc和free
使用特权
评论回复
赏
点赞共0人点赞
mattlincoln
当前离线
关注TA
发消息
22
主题1515
帖子4467
积分
中级工程师
中级工程师, 积分 4467, 距离下一级还需 533 积分
中级工程师, 积分 4467, 距离下一级还需 533 积分
积分4467
在线时间329 小时
精华0
注册时间2020-3-6
最后登录2025-6-20
打赏0.00受赏5.00
17楼
mattlincoln|
|
2025-6-8 23:22
|
只看该作者
正确处理返回动态分配内存的函数
使用特权
评论回复
赏
点赞共0人点赞
timfordlare
当前离线
关注TA
发消息
42
主题1573
帖子4698
积分
中级工程师
中级工程师, 积分 4698, 距离下一级还需 302 积分
中级工程师, 积分 4698, 距离下一级还需 302 积分
积分4698
在线时间360 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏10.00
18楼
timfordlare|
|
2025-6-8 23:31
|
只看该作者
在使用完毕后未正确释放
使用特权
评论回复
赏
点赞共0人点赞
loutin
当前离线
关注TA
发消息
84
主题1567
帖子4647
积分
中级工程师
中级工程师, 积分 4647, 距离下一级还需 353 积分
中级工程师, 积分 4647, 距离下一级还需 353 积分
积分4647
在线时间360 小时
精华0
注册时间2020-3-6
最后登录2025-6-26
打赏0.00受赏35.00
19楼
loutin|
|
2025-6-8 23:40
|
只看该作者
分配与释放一一对应。
使用特权
评论回复
赏
点赞共0人点赞
cemaj
当前离线
关注TA
发消息
40
主题4001
帖子1万
积分
资深工程师
资深工程师, 积分 12003, 距离下一级还需 7997 积分
资深工程师, 积分 12003, 距离下一级还需 7997 积分
积分12003
在线时间521 小时
精华0
注册时间2015-4-4
最后登录2025-6-26
打赏0.00受赏43.00
20楼
cemaj|
|
2025-6-8 23:49
|
只看该作者
在释放内存后,立即将指针设置为NULL,以避免悬挂指针的问题。
使用特权
评论回复
赏
点赞共0人点赞