【问题标题】:How to detect memory leaks as a new C programmer [closed]作为新的 C 程序员如何检测内存泄漏[关闭]
【发布时间】:2017-04-06 18:06:04
【问题描述】:

我开始学习来自 Java 背景的 C。我的第一个玩具程序是二叉搜索树。我已经实现了 add、find、min、max、depthfirst 和 delete。我的问题源于删除方法。

为了调试,我将树(深度优先)打印到控制台,然后我使用 delete 删除节点并再次打印 bst。如果是 Java,我会收工并继续前进,但我担心在某个地方我忘记释放一些内存(或者以为我做了但释放了错误的指针或其他东西)。

作为新手 C 程序员,检测此类内存泄漏的最佳方法是什么?如果我应该在 IDE 中使用一些工具,我会使用 CLion 作为我的 IDE,但我更喜欢一些不依赖于 IDE 的技巧。

【问题讨论】:

  • 你可以尝试使用 valgrind。
  • 简单:任何时候调用malloc(或相关函数),证明从那里开始的每条执行路径都以free结尾。
  • 你可以使用 valgrind,如果你想要更精确,你可以选择 --leak-check=full。
  • @KerrekSB 谢谢,但如果我能做到这一点,我将是掌握 C 的大部分方法:) 我担心的是释放错误的指针,或者可能释放双指针而不取消引用它或
  • @KerrekSB,证明所有代码路径都是免费的并不“简单”。如果是这样,就不会有泄漏。首先,编译/链接工具链默认会这样做

标签: c debugging memory memory-management memory-leaks


【解决方案1】:

我理解您的担忧,我记得有一个本科项目在我的家用台式机上执行得很好,但在助教的笔记本电脑中产生了内存泄漏。那时我什至无法想象......

所以在那之后我开始使用Valgrind 来检查内存泄漏。如果 Valgrind 说我们很酷,我会说我们很酷并收工!

专业提示:How do I use valgrind to find memory leaks?

【讨论】:

  • 感谢您在问题被否决后抽出宝贵时间回答
  • 我为你投了赞成票,因为这是一个好问题
  • 太棒了@pm100,在我们的帮助下,OP 的问题现在有了非负分...!希望你喜欢我的回答顺便说一句! :)
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 2010-09-21
  • 1970-01-01
  • 2021-08-11
  • 2016-05-14
  • 2011-06-28
相关资源
最近更新 更多