gpt4 book ai didi

ios - NSString 字符串与 CString :encoding: - not copying the Cstring?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:35:56 25 4
gpt4 key购买 nike

我需要为我的对象计算签名(一种哈希)。计算需要许多每个字符的操作,因此为了加快此过程,我的代码对 CString 进行操作,然后将计算的 CString 转换为最终的 NSString。 stub 代码如下所示:

- (NSString *)signature
{
NSString *signatureString = @"?";
char *buffer;

buffer = malloc(sizeof(char)*(self.hashLength+1));
if ( buffer ) {
// Code computing a signature into the buffer

signatureString = [NSString stringWithCString:buffer
encoding:NSASCIIStringEncoding];
free(buffer);
}

return signatureString;
}

我希望在创建 NSString 时,源 CString 中的字符会被复制到 NSString 对象的内部结构中。但是在运行时我收到错误:

malloc: *** error for object 0x8f734d4: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

这看起来字符没有被复制,而是从它们的原始内存位置使用。真的是这样吗?这是否意味着我不需要释放分配的内存?NSString 会在对象销毁时释放 CString 内存吗?

我找不到任何解释该问题的文档,但因为我显然想避免内存泄漏,所以我宁愿确定,

最佳答案

所以答案是:

是的,[NSString stringWithCString:encoding:] 确实将源 CString 复制到它的内部结构中。如果源 CString 分配在内存堆上,它可以在创建 NSString 对象后立即释放。

我收到的错误消息是由签名计算代码 中的错误引起的。由于 for 循环中错误初始化的索引变量,代码写入超出分配的内存。

关于ios - NSString 字符串与 CString :encoding: - not copying the Cstring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211501/

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