只是真的在寻找以下的解释,如果变量摘要不是手动分配的,那么 CFDataCreateWithBytesNoCopy()返回的数据在整个程序中引用时会不断变化。
CFDataRef sha1(CFStringRef string)
{
unsigned char* digest = malloc(CC_SHA1_DIGEST_LENGTH);
const char* cData = CFStringGetCStringPtr(string, CFStringGetFastestEncoding(string));
CC_SHA1(cData, strlen(cData), digest);
CFDataRef sha = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, digest, CC_SHA1_DIGEST_LENGTH, kCFAllocatorDefault);
free(digest);
CFRelease(string);
return sha;
}
因为这行不通...
CFDataRef sha1(CFStringRef string)
{
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
const char* cData = CFStringGetCStringPtr(string, CFStringGetFastestEncoding(string));
CC_SHA1(cData, strlen(cData), digest);
CFDataRef sha = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, digest, CC_SHA1_DIGEST_LENGTH, kCFAllocatorDefault);
return sha;
}
顶部代码中是否还有内存泄漏?