我有一个非常简单的C结构:
typedef struct {
int tag;
CGPoint position;
} Place;
即,所有标量类型和结构中没有指针。
然后我得到了一系列这样的点:
Place *dynamicPlaces = calloc(numberOfPlaces, sizeof(Place));
所以dynamicPlaces
的每个元素都应该是(除非我把某些东西混合起来...它当然可能与我和指针......)类型Place
的结构,初始化为其所有成员为0 ,是吗?到目前为止一切都很好。
然后我试图将该数组放入要通过网络发送的NSData对象中(以及元素数量,未显示):
NSData *placesData = [NSData dataWithBytes:dynamicPlaces length:(sizeof(Place) * numberOfPlaces)];
我直接传递数组,因为如果内存服务,指针dynamicPlaces
实际上是指向数组的第一个struct元素,然后我通过{{1告诉它有多少个元素}}。我认为这很好。
最后,另一方面,我在解码对象时这样做。
length
但是我在那条线上得到[receivedData getBytes:receivedDynamicPlacesArrayPointer length:[receivedData length]];
,我无法弄明白为什么。据文档所知,这应该是将NSData中的字节存储到内存中的复制位置,并使用EXC_BAD_ACCESS
指向该blob。
完全有可能我犯了这个错误,指针绊倒了我,即使我认为我理解它们。任何帮助将不胜感激。
答案 0 :(得分:3)
getBytes:length:docs说:“将接收者数据开头的一些字节复制到给定的缓冲区中。”
所以你需要先自己为receivedDynamicPlacesArrayPointer分配内存。你做到了吗?
换句话说,你会这样做:
Place* receivedDynamicPlacesArrayPointer = (Place*)malloc([receivedData length]);