在C程序中查找内存泄漏的最佳方法

时间:2011-05-17 22:14:57

标签: c macos pointers memory-management

我正在尝试完成大学作业,并且标记条件指定内存管理的5% - 特别是没有内存泄漏。

据我了解,简单C程序中的内存泄漏只是由程序放弃的指针引起的 - 即,malloc / calloc / etc调用从不具有相应的free

我的问题分为三部分:

  1. 什么是Solaris上最简单的方法 和OSX“证明”你没有 泄露了任何记忆?
  2. XCode有吗? 任何帮助确定记忆的工具 泄漏?
  3. 是否为操作系统 释放所有以前分配的 一个c程序内存一次 过程结束了?

4 个答案:

答案 0 :(得分:5)

Valgrind是你的朋友。

答案 1 :(得分:3)

  1. 对于每个malloc(),您需要确保只有一个free()。
  2. 我没有使用XCode,但this论坛条目可能会有所帮助。
  3. 是。然而,让你的运行程序“泄漏”仍然是糟糕的形式。
  4. 一般来说,如果不使用像内存调试器这样的工具(早期),学习如何避免泄漏是个好主意 - 特别是对于简单的程序。然而,这很痛苦:在构建任何非平凡的事情时,你会想要开始学习如何使用更高级的调试工具(如Valgrind,正如Alex Reynolds在另一个答案中所建议的那样。)

答案 2 :(得分:1)

Mac OS的答案和避免的示例(为您节省了半个小时)。


Mac OS不附带Valgrind或dmalloc。此外,Valgrind在尝试将其安装在Sierra中时存在一些兼容性问题。

有一个名为“ leaks”的实用程序,我可以通过它运行它:

leaks -atExit --/Contents/Developer/usr/lib/libLeaksAtExit.dylib ./a.out

不幸的是,这个没有报告明显的内存泄漏 ...也许我使用错了,但是我只是在寻找一种 easy 方法来检查我的C程序应释放其内存。

如果有时间,可能 阅读并使用Using OSX Leaks for C Programs on the Command Line?

资源:

  1. Finding Memory Leaks
  2. Using the "leaks" command on a C/C++ executable

PS:也许如果与“ iprofiler”一起使用,它可能会很有用,但是我没有安装它。

答案 3 :(得分:0)

还有dmalloc

相关问题