我有一个非常简单的 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
实际上指向数组的第一个结构元素,然后我告诉它有多少元素通过长度
。我认为这很好。
最后,另一方面,我在解码我的对象时这样做。
[receivedData getBytes:receivedDynamicPlacesArrayPointer length:[receivedData length]];
但我在该行收到了一个 EXC_BAD_ACCESS
,我不太明白为什么。据我从文档中得知,这应该是将 NSData 中的字节存储到内存中复制的位置,并使用 receivedDynamicPlacesArrayPointer
指向该 blob。
这完全有可能是我在做这件事时犯了一个错误,尽管我认为我理解它们,但指针却把我绊倒了。任何帮助将不胜感激。
最佳答案
getBytes:length: 文档说:“将接收方数据开头的一些字节复制到给定的缓冲区中。”
因此您需要先自己为 receivedDynamicPlacesArrayPointer 分配内存。你这样做了吗?
换句话说,你会喜欢:
Place* receivedDynamicPlacesArrayPointer = (Place*)malloc([receivedData length]);
关于ios - 在 NSData 中存储 C 结构的 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565223/