当我尝试记录此功能的结果时,我继续获得EXC_BAD_ACCESS
?我做错了什么?
-(uint64_t) rand64bitNum {
uint32_t left = arc4random();
uint32_t right = arc4random();
uint64_t randNum = 0;
memcpy(&randNum, &left, sizeof(left));
uint16_t offset = sizeof(left);
memcpy(&randNum+offset, &right, sizeof(right));
return randNum;
}
答案 0 :(得分:4)
&randnum+offset
没有按照你的想法行事;以指向的东西为单位执行指针添加。所以你可能想要(char *)&randnum + offset
。
答案 1 :(得分:4)
你的记忆错误的解释在@ OliCharlesworth的答案中给出,但我想提出一个更好的解决方案,根本不需要memcpy
:
- (uint64_t)rand64bitNum
{
uint64_t left = arc4random();
uint64_t right = arc4random();
uint64_t randNum = (right << 32) | left;
return randNum;
}
也许更好,并且(几乎)没有错误的余地,你可以使用arc4random_buf(3)
:
- (uint64_t)rand64bitNum
{
uint64_t randNum;
arc4random_buf(&randNum, sizeof randNum);
return randNum;
}