gpt4 book ai didi

c++ - SecVerifyTransformCreate 内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 05:18:28 26 4
gpt4 key购买 nike

采用以下代码:

// init
CFDataRef signature = CFDataCreate(...);
CFDataRef pubKeyData = CFDataCreate(...);

CFArrayRef array = NULL;
OSStatus res = SecItemImport(pubKeyData, ..., &array);
SecKeyRef pubKey = (SecKeyRef) CFArrayGetValueAtIndex(array, 0);

// everything goes wrong here
SecTransformRef verifier = SecVerifyTransformCreate(pubKey, signature, NULL);

// release
CFRelease(signature);
CFRelease(pubKeyData);
CFRelease(signature);
CFRelease(verifier);

简而言之:我正在从文件中导入公钥和签名,为该签名创建验证器。在后续代码行中,我能够成功验证签名。

我担心的是调用SecVerifyTransformCreate 方法时发生的内存泄漏。如果我注释掉该行,泄漏就消失了。

我已经阅读了所有关于创建规则获取规则的内容,我想我已经弄清楚了发布。

最佳答案

经过一些广泛的测试,这是我发现的:

如问题所述,在上面代码之后的行中,我正在执行验证器来检查签名是否正确,重要的方法是:

CFTypeRef result = SecTransformExecute(verifier, NULL);

如果我不包括这行代码,则在 Xcode 的Instrumentation 工具中可以观察到 320B 的泄漏(每次调用)。

我假设 SecVerifyTransformCreate 方法分配了一些内存,并希望您调用 SecTransformExecute,然后释放它。如果你不这样做,就会有泄漏。 IMO 这是错误的行为。

正如 Frank 所提到的,即使没有明显的泄漏,操作系统报告的内存使用量也会增长,但不会呈指数增长(在我的例子中它停止在 40MB 左右)。这是正确的行为。

感谢 Frank 的详尽阐述。

关于c++ - SecVerifyTransformCreate 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700807/

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