変数ダイジェストが手動で割り当てられていない 場合、 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;
}
また、トップコードにメモリリークはありますか?