任何人都可以使用泄漏吗? (来自仪器)
Posted
技术标签:
【中文标题】任何人都可以使用泄漏吗? (来自仪器)【英文标题】:Can anybody use Leaks? (from Instruments) 【发布时间】:2011-03-21 10:28:37 【问题描述】:我用 C 和 objC 编写了一个带有泄漏的简单程序,我无法理解 Leaks
。
在这里:
int main(void)
int t = 78;
t = malloc(50);
t = 4;
return 0;
它可以告诉我哪个变量是泄漏的,或者它在哪里泄漏?
互联网上的每个Leaks
教程(所有两个)都很糟糕。
请帮忙?
【问题讨论】:
也许您可以向我们展示有泄漏的代码。 【参考方案1】:如果您使用您提供的代码测试 Leaks 工具,难怪它无法发现任何问题。
Leaks 的默认快照间隔为 10 秒。但是您的程序甚至不会运行 10 秒。 您在应用程序入口点的范围内进行分配。 "t" 在 main 退出之前是有效的(当没有被释放时)。所以操作系统无论如何都会回收内存。 最重要的是:您的代码不包含泄漏。如果您“松散引用” t,那将是一个泄漏。 (例如,通过执行另一个 t = malloc() 或分配 t 其他变量)如果您想查看泄漏的实际效果,请创建一个默认的 Cocoa 应用程序,将实例变量“test”添加到您的 AppDelegate 并将以下代码放入实现中。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
test = malloc(50);
test = malloc(20);
【讨论】:
你是否在头文件中声明了“test”?您使用的是哪个版本的 Xcode/Instruments?我只是仔细检查了上面发布的代码,它清楚地显示了与第二个 malloc 一致的 1 个泄漏。 确实是你的作品。但是如何查看代码中的泄漏点? 查看 → 扩展细节。这显示了导致泄漏的调用堆栈。【参考方案2】:我没用过Leaks,但是网上有很多教程,从苹果的Apple's developer documentation on the subject、Mobile Orchard和Cocoa is my Girlfriend开始,好像是最好的。
【讨论】:
我会再试一次。。这些我都看过了,但还是不能用。只有我吗? 也许吧!如果您使用的是 XCode 4,那么静态分析可以很好地发现潜在的泄漏,您可以尝试一下。 我使用静态分析,但到目前为止。如果我在其中添加一个带有 t 的 printf,那么分析什么也不会显示。以上是关于任何人都可以使用泄漏吗? (来自仪器)的主要内容,如果未能解决你的问题,请参考以下文章