我对一件奇怪的事情感到困惑......我有一个 unsigned char 数组......我使用 calloc 分配它并在其中记录一些字节数据......但是当我释放这个 unsigned char 并再次分配它时,我看到它在内存中保留了上次分配的相同地址。我明白为什么....但是我不明白为什么我第二次尝试在那里写入的数据没有被写入......第一次写入的数据被写入......有人可以解释一下吗? ???
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
这就是我分配它的方式....实际上我的问题是由于这种分配,每2秒发生一次我有内存泄漏...但是当我尝试释放分配的内存扇区时,会发生上述情况... .:(
请如果有人可以帮助我......我会很高兴......这是代码......
- (unsigned char*) createBitmapContext:(UIImage*)anImage{
CGImageRef imageRef = [anImage CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
bytesPerPixel = 4;
bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
imageRef=nil;
return rawData; }
在这段代码中没有我释放(rawData)的部分,因为我无法在这个方法中释放它,所以我尝试全局定义 rawData 并在调用这个方法后释放它......但没有什么有趣的......
请如果有人可以帮助我......我会很高兴......