gpt4 book ai didi

iphone - 使用仪器检测 C 泄漏(泄漏)

转载 作者:行者123 更新时间:2023-11-29 03:42:08 28 4
gpt4 key购买 nike

我编写了一个测试代码来检查如何使用 Instrument(Leaks)。我创建了一个单一 View 应用程序,单击按钮后我加载了一个像这样的新 View ...

- (IBAction)btn_clkd:(id)sender {
new_file *new = [[new_file alloc] init];

if (new) {
[self.navigationController pushViewController:new animated:YES];
new = nil;
}
}

在 new_file ViewDidLoad 方法中,我创建了如下所示的泄漏...

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

char *c_mem = (char*) malloc(10000000);
strcpy(c_mem, "TESTING");
// free(c_mem);
}

即使我使用 ARC,分配的内存也是普通的 C malloc,并且在使用后我没有释放内存,即使我一次又一次地弹出并加载新 View ,仪器(Leaks)也没有检测到任何泄漏在这段代码中...是什么原因,我检查正确吗?

谢谢

最佳答案

鉴于您的 View Controller 已释放(请验证),最终泄漏将检测到 c_mem 指针泄漏。

仪器可能无法立即发现这一点 - 由于其用于检测泄漏的算法。

该算法基本上是搜索未引用的变量,这些变量看起来像指向堆的指针。如果碰巧有一个任意变量,例如p,其值恰好是c_mem的值 - 那么Instruments认为 指针 c_mem 仍然从 p 引用——即使 p 可能只包含任意数据并且不引用 c_mem .

请注意,Instruments 泄漏检测算法实际上更为复杂,并且可能会发生变化并得到改进。

为了发现泄漏,我总是在循环中运行特殊代码 - 例如单元测试。如果使用的内存没有及时增长,那么通常是好的。您还可以使用 Leaks 的“快照”功能和 Allocations 的“标记生成”功能来检查堆的当前状态。

关于iphone - 使用仪器检测 C 泄漏(泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18267329/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com