尝试返回uint64_t数时EXC_BAD_ACCESS

时间:2013-05-26 18:55:07

标签: ios objective-c memcpy

当我尝试记录此功能的结果时,我继续获得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;
}

2 个答案:

答案 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;
}