3

我正在尝试编写一个代码来从 malloced 缓冲区创建 NSMutableData。我使用 freewhendone = YES
1)它在创建 NSData 后访问缓冲区时出错。(在下面代码中的 memset 中)
2)malloced 缓冲区指针和 [data bytes] 指针不同。

这些有什么解释吗?

UWORD8 *rgb_buffer = malloc(u4_stride * u4_height * 3);

NSMutableData *rgbData = [NSMutableData dataWithBytesNoCopy:rgb_buffer

                                                     length:(u4_stride * u4_height * 3)

                                               freeWhenDone:YES];
memset(rgb_buffer, 0, (u4_stride * u4_height * 3));
4

1 回答 1

3

来自二进制数据编程指南

NSMutableData 响应 dataWithBytesNoCopy:length:,但无论如何都会复制字节并立即释放缓冲区。

它在创建 NSData 后访问缓冲区时出错。(在下面代码的 memset 中)

缓冲区立即被释放。

malloced 缓冲区指针和 [data bytes] 指针是不同的。

NSMutableData创建字节的副本。

于 2013-10-15T12:29:17.940 回答