【发布时间】: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