簡體   English   中英

嘗試返回uint64_t數時EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS when trying return a uint64_t number

當我嘗試記錄此函數的結果時,我繼續獲取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;
}

&randnum+offset不符合你的想法; 以指向的東西為單位執行指針添加。 所以你可能想要(char *)&randnum + offset

@ 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM