私は 1 つの奇妙なことについて混乱しています....私は unsigned char 配列を持っています.... calloc を使用してそれを割り当て、その中にいくつかのバイトデータを記録します...しかし、この unsigned char を解放して再度割り当てると、前回割り当てられたメモリ内の同じアドレスが予約されていることがわかります。理由はわかります....しかし、2回目に書き込もうとしているデータが書き込まれない理由がわかりません...最初に書き込まれたデータが書き込まれています....誰か私にこれを説明してもらえますか? ??????
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
これが私がそれを割り当てる方法です....実際に私の問題は、この割り当てのために2秒ごとに1回発生するため、メモリリークが発生することです...しかし、割り当てられたメモリセクターを解放しようとすると、上記のことが起こります... .:(
誰かが私を助けることができれば....私はとてもうれしいです...ここにコードがあります...
- (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; }
このコードには free(rawData) する部分がありません。このメソッド内で解放できないため、rawData をグローバルに定義し、このメソッドを呼び出した後に解放しようとしましたが、何も興味深いことはありません....
誰かが私を助けることができれば....私はとてもうれしいです...