joh*_*ohn 3 c linux gcc memory-leaks
我想用C编程.我想知道在开发本身时我们应该遵循什么样的做法来避免内存泄漏.请提及在处理字符串和动态内存分配时要特别注意的事项.
我不同意这个问题的低票.我认为这是一个真正的问题,而且非常深刻.
从表面上看,答案是"呼唤free
你所记忆的任何记忆malloc
".
但真正的答案是您的设计应该包括明确的所有权模型.避免内存泄漏和访问悬空内存的唯一方法是始终知道,对于每一块动态分配的内存,哪个对象拥有该内存(并负责处理它).
如果你没有这样一个明确的所有权模型,你将永远捕获内存泄漏和使用后免费的错误(这也适用于C++).使用垃圾收集器可以让您以大量的CPU周期为代价来解决这些问题.
如果你确实有一个明确的所有权模型,这些问题通常会消失:所有者free
在它本身被处置时所拥有的所有内存.
如果可能,请在堆栈上使用变量,而不是使用堆中的内存.
尽量避免常见错误,一些指示:
free()
在使用malloc()
或时打电话calloc()
. free()
要先丢弃它,即不要丢失引用. realloc()
.不要对输入和输出参数使用相同的指针. 避免使用字符串犯下的常见错误,一些指示:
NUL
字符的内存. NUL
在您的所有用例终止(类似功能即使使用strncpy()
等)学习使用调试器(gdb)
学习使用静态分析工具.可以从发行版的软件包存储库中安装splint,valgrind,clang等工具.
一些有用的链接:
C-FAQ -阵列与指针
的c-FAQ -内存分配
安全C语言的表达-存储器管理
SO问题与避免在C/C++内存泄漏
yolinux教程
希望这可以帮助!
归档时间: |
|
查看次数: |
949 次 |
最近记录: |