如何避免c开发过程中的内存泄漏

joh*_*ohn 3 c linux gcc memory-leaks

我想用C编程.我想知道在开发本身时我们应该遵循什么样的做法来避免内存泄漏.请提及在处理字符串和动态内存分配时要特别注意的事项.

Emp*_*ian 9

我不同意这个问题的低票.我认为这是一个真正的问题,而且非常深刻.

从表面上看,答案是"呼唤free你所记忆的任何记忆malloc".

但真正的答案是您的设计应该包括明确的所有权模型.避免内存泄漏和访问悬空内存的唯一方法是始终知道,对于每一块动态分配的内存,哪个对象拥有该内存(并负责处理它).

如果你没有这样一个明确的所有权模型,你将永远捕获内存泄漏和使用后免费的错误(这也适用于C++).使用垃圾收集器可以让您以大量的CPU周期为代价来解决这些问题.

如果你确实有一个明确的所有权模型,这些问题通常会消失:所有者free在它本身被处置时所拥有的所有内存.


ano*_*ard 6

如果可能,请在堆栈上使用变量,而不是使用堆中的内存.

尽量避免常见错误,一些指示:

  1. 确保free()在使用malloc()或时打电话calloc().
  2. 不要先指定指向已分配内存位置的指针,而不free()要先丢弃它,即不要丢失引用.
  3. 使用时要小心realloc().不要对输入和输出参数使用相同的指针.

避免使用字符串犯下的常见错误,一些指示:

  1. 确保有终止NUL字符的内存.
  2. 确保字符串NUL在您的所有用例终止(类似功能即使使用strncpy()等)

学习使用调试器(gdb)
学习使用静态分析工具.可以从发行版的软件包存储库中安装splint,valgrind,clang等工具.

一些有用的链接:
C-FAQ -阵列与指针
的c-FAQ -内存分配
安全C语言的表达-存储器管理
SO问题与避免在C/C++内存泄漏
yolinux教程

希望这可以帮助!