![](/img/trans.png)
[英]Passing uint8_t to another viewController 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.